首先要把Java秘钥进行转换,然后再进行加密

转制秘钥的方法

public static string RSAPrivateKeyJava2DotNet(string privateKey)
{
RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey)); return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));
}

加密的方法

public static string Sign(string contentForSign, string privateKey)
{
//转换成适用于.Net的秘钥
var netKey = RSAPrivateKeyJava2DotNet(privateKey);
var rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(netKey);
//创建一个空对象
var rsaClear = new RSACryptoServiceProvider();
var paras = rsa.ExportParameters(true);
rsaClear.ImportParameters(paras);
//签名返回
using (var sha256 = new SHA256CryptoServiceProvider())
{
var signData = rsa.SignData(Encoding.UTF8.GetBytes(contentForSign), sha256);
return BytesToHex(signData);
}
} public static string BytesToHex(byte[] data)
{
StringBuilder sbRet = new StringBuilder(data.Length * 2);
for (int i = 0; i < data.Length; i++)
{
sbRet.Append(Convert.ToString(data[i], 16).PadLeft(2, '0'));
}
return sbRet.ToString();
}

调用:

string rsaSecret = @"MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAjdAhDuqzKCzaYyrrxFLdWVoR7wwmSdbVHBSZ/lpILvN/vPaohbi0NChwAEXYbvIXrFQ7zQyuqKazoEbvvXRNKQ.......";

string signDataString = Sign("Hello World!", rsaSecret);

最新文章

  1. iOS逆向工程之App脱壳
  2. 下载判断Android和iOS
  3. 【Exception—WebForm】当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。
  4. MYSQL的慢查询两个方法
  5. 低配置电脑播放 flash 视频时 占 cpu 资源过高的解决方法
  6. NRF51822之GPIOTE使用
  7. Hibernte继承映射
  8. 哎哟,我的.NET呀
  9. 互联网+医疗(FW)
  10. Google开源库-Volley
  11. Js遍历Josn对象(内容对比页实现思路)
  12. ListView优化问题
  13. Spring自学教程-jabc编程详解、RowMapper使用(三)
  14. JVM(一)JVM的基本结构
  15. SAP 图标查找及方法
  16. vue.js数据可以在页面上渲染成功却总是警告提示某个字段“undefined”未定义
  17. WPF界面假死
  18. js中的变量提升与函数提升
  19. PHP.ini 文件大小限制
  20. salt-api配置安装 以及使用

热门文章

  1. 面试阿里,美团,京东都会被问到的Spring ,从基础到源码帮你全搞定
  2. C++基础知识篇:C++ 基本语法
  3. java实验类的实现
  4. finalize和clean
  5. 【mq读书笔记】定时消息
  6. 【mq读书笔记】mq消息消费
  7. 深圳-2020-java面试题分享
  8. JZOJ 2020.10.6 提高B组反思
  9. JavaScript使用中的一些小技巧
  10. Python使用property函数定义的属性名与其他实例变量重名会怎么样?