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

发布于 2024-08-31 10:13:47 字数 946 浏览 5 评论 0原文

生成的 RSA 私钥和公钥,

您好,我有一个在 .net 中以这种格式

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命令我可以指定我自己的模数、指数等?

有什么想法吗?

谢谢

Hello i have a private and public keys for RSA generated in .net

in this format

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>";

how can i convert this so i can use it in php openssl functions to encrypt and decrypt data?
i need both public and private keys converted.

maybe with openssl bash command in linux where i can specify my own modulus, exponent and so on?

any ideas?

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十年不长 2024-09-07 10:13:47

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

  • 如果您有权访问 .NET 源,则可以将密钥导出为 PEM。 (我不确定这是否可以通过标准系统库实现,但 BouncyCastle.
  • 如果您有能力使用另一种语言来翻译密钥,那么在 perl 中这可以相对容易地完成。

    使用 Crypt::OpenSSL::RSA;
    使用 Crypt::OpenSSL::Bignum;
    使用 MIME::Base64;
    $modulus = Crypt::OpenSSL::Bignum->new_from_bin(decode_base64($XMLModulus));
    $exponent= Crypt::OpenSSL::Bignum->new_from_bin(decode_base64($XMLExponent));
    # 其余参数可以读入,与前两个参数相同
    # 不需要 dq、dp 和 inverseQ
    $privateKey = Crypt::OpenSSL::RSA->($modulus, $exponent, $d, $p, $q)
    # 以 PHP 应支持的标准二进制形式 (DER) 输出。
    打印 $privateKey->get_private_key_string()
    # 如果你需要 PEM,openssl 绝对可以转换它。

抱歉,我无法为您提供正确的 PHP 解决方案。希望 C# 解决方案能够发挥作用。

Unfortunately, I haven't found a solution to the exact problem you've described, however, there are a few work-arounds you may find useful:

  • If you have access to the .NET source, you can export your keys as PEM. (I'm not positive if this is possible through the standard system libraries, but it is certainly supported by BouncyCastle.
  • If you can afford to use another language to translate the key, this can be done relatively easy in perl.

    use Crypt::OpenSSL::RSA;
    use Crypt::OpenSSL::Bignum;
    use MIME::Base64;
    $modulus = Crypt::OpenSSL::Bignum->new_from_bin(decode_base64($XMLModulus));
    $exponent= Crypt::OpenSSL::Bignum->new_from_bin(decode_base64($XMLExponent));
    # You can reading in the remaining parameters is the same as the first two
    # dq, dp, and inverseQ are not needed
    $privateKey = Crypt::OpenSSL::RSA->($modulus, $exponent, $d, $p, $q)
    # Outputs it in a standard binary form (DER) which PHP should support.
    print $privateKey->get_private_key_string()
    # If you need PEM, openssl can definitely convert it.

Sorry I couldn't get you a solution in PHP proper. Hopefully the C# solution will work though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文