zoukankan      html  css  js  c++  java
  • C#下解析、生成JAVA的RSA密钥、公钥

    C#下解析、生成JAVA的RSA密钥、公钥

    需要用到的dll在nuget上的地址是:https://www.nuget.org/packages/BouncyCastle/,相关转换代码如下:

    1. using Org.BouncyCastle.Asn1.Pkcs;
    2. using Org.BouncyCastle.Asn1.X509;
    3. using Org.BouncyCastle.Crypto.Parameters;
    4. using Org.BouncyCastle.Math;
    5. using Org.BouncyCastle.Pkcs;
    6. using Org.BouncyCastle.Security;
    7. using Org.BouncyCastle.X509;
    8. using System;
    9. using System.Xml;
    10. /// <summary>
    11. /// RSA密钥格式转换
    12. /// </summary>
    13. public static class RSAConverter
    14. {
    15. /// <summary>
    16. /// RSA私钥格式转换,java->.net
    17. /// </summary>
    18. /// <param name="privateKey">java生成的RSA私钥</param>
    19. /// <returns></returns>
    20. public static string RSAPrivateKeyJava2DotNet(this string privateKey)
    21. {
    22. RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey));
    23. 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>",
    24. Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
    25. Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
    26. Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
    27. Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
    28. Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
    29. Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
    30. Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
    31. Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));
    32. }
    33. /// <summary>
    34. /// RSA私钥格式转换,.net->java
    35. /// </summary>
    36. /// <param name="privateKey">.net生成的私钥</param>
    37. /// <returns></returns>
    38. public static string RSAPrivateKeyDotNet2Java(this string privateKey)
    39. {
    40. XmlDocument doc = new XmlDocument();
    41. doc.LoadXml(privateKey);
    42. BigInteger m = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Modulus")[0].InnerText));
    43. BigInteger exp = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Exponent")[0].InnerText));
    44. BigInteger d = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("D")[0].InnerText));
    45. BigInteger p = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("P")[0].InnerText));
    46. BigInteger q = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Q")[0].InnerText));
    47. BigInteger dp = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("DP")[0].InnerText));
    48. BigInteger dq = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("DQ")[0].InnerText));
    49. BigInteger qinv = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("InverseQ")[0].InnerText));
    50. RsaPrivateCrtKeyParameters privateKeyParam = new RsaPrivateCrtKeyParameters(m, exp, d, p, q, dp, dq, qinv);
    51. PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKeyParam);
    52. byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetEncoded();
    53. return Convert.ToBase64String(serializedPrivateBytes);
    54. }
    55. /// <summary>
    56. /// RSA公钥格式转换,java->.net
    57. /// </summary>
    58. /// <param name="publicKey">java生成的公钥</param>
    59. /// <returns></returns>
    60. public static string RSAPublicKeyJava2DotNet(this string publicKey)
    61. {
    62. RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
    63. return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
    64. Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
    65. Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
    66. }
    67. /// <summary>
    68. /// RSA公钥格式转换,.net->java
    69. /// </summary>
    70. /// <param name="publicKey">.net生成的公钥</param>
    71. /// <returns></returns>
    72. public static string RSAPublicKeyDotNet2Java(this string publicKey)
    73. {
    74. XmlDocument doc = new XmlDocument(); doc.LoadXml(publicKey);
    75. BigInteger m = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Modulus")[0].InnerText));
    76. BigInteger p = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Exponent")[0].InnerText));
    77. RsaKeyParameters pub = new RsaKeyParameters(false, m, p);
    78. SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pub);
    79. byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
    80. return Convert.ToBase64String(serializedPublicBytes);
    81. }
    82. }
  • 相关阅读:
    鼠标滑过,图片放大效果。
    ASP.NET自定义省市级联控件
    C++ Test单元测试工具
    网络超时检测
    电子工程师知识汇整【转】
    DDD进行调试 介绍 转
    VS2008配置PC Lint (静态代码检查工具PCLint)
    【转】三大UML建模工具Visio、Rational Rose、PowerDesign的区别
    第一个corba服务Hello World (转)
    python简介
  • 原文地址:https://www.cnblogs.com/zbliao/p/13516140.html
Copyright © 2011-2022 走看看