我如何将RSAParameters从.net转换为.pem文件,以便我可以在php中使用它

时间:2010-05-04 14:14:53

标签: c# php rsa private-key

您好我有.net

中生成的RSA的私钥和公钥

采用此格式

string privateKey = "<RSAKeyValue>" +
                         "<Modulus>...kCFhsjB4xMW49mrx5B/Ga...</Modulus>" +
                         "<Exponent>...</Exponent>" +
                         "<P>...7bRCrQVgVIfXdTIH3iY8x...</P>" +
                         "<Q>...4SiQDhrAZADuFDTr7bRCrQVgVIfXdTIH3iY8x...</Q>" +
                         "<DP>...ZADuFDTr7bRCrQVgVIfXdT...</DP>" +
                         "<DQ>...4SiQDhrAZADuFDTr...</DQ>" +
                         "<InverseQ>...sjB4xMW49mrx5B/Ga...</InverseQ>" +
                         "<D>...SiQDhrAZADuFDTr7bRCrQVgVIf...</D>" +
                     "</RSAKeyValue>";

我怎么能转换这个,所以我可以在php openssl函数中使用它来加密和解密数据? 我需要转换公钥和私钥。

也许用linux中的openssl bash命令我可以指定自己的模数,指数等等?

任何想法?

感谢

1 个答案:

答案 0 :(得分:1)

不幸的是,我还没有找到您所描述的确切问题的解决方案,但是,您可能会发现一些有用的解决方法:

  • 如果您有权访问.NET源,则可以将密钥导出为PEM。 (如果可以通过标准系统库实现这一点,我不肯定,但BouncyCastle肯定支持它。
  • 如果您能够使用其他语言翻译密钥,可以在perl中相对简单地完成。

    使用Crypt :: OpenSSL :: RSA;
    使用Crypt :: OpenSSL :: Bignum;
    使用MIME :: Base64;
    $ modulus = Crypt :: OpenSSL :: Bignum-&gt; new_from_bin(decode_base64($ XMLModulus));

    $ exponent = Crypt :: OpenSSL :: Bignum-&gt; new_from_bin(decode_base64($ XMLExponent));
    #你可以读取剩下的参数与前两个相同的
    不需要#dq,dp和inverseQ $ privateKey = Crypt :: OpenSSL :: RSA-&gt;($ modulus,$ exponent,$ d,$ p,$ q)
    #以PHP应支持的标准二进制形式(DER)输出它。 print $ privateKey-&gt; get_private_key_string()
    #如果你需要PEM,openssl绝对可以转换它。

抱歉,我无法为您提供适当的PHP解决方案。希望C#解决方案能够工作。