Как я могу преобразовать RSAParameters из .net в файл .pem, чтобы я мог использовать его в php - PullRequest
4 голосов
/ 04 мая 2010

Здравствуйте, у меня есть закрытые и открытые ключи для 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 для шифрования и дешифрования данных? мне нужно преобразовать как открытый, так и закрытый ключи.

может быть с командой openssl bash в linux, где я могу указать свой собственный модуль, показатель степени и так далее?

есть идеи?

спасибо

1 Ответ

1 голос
/ 04 мая 2010

К сожалению, я не нашел решения именно той проблемы, которую вы описали, однако есть несколько обходных путей, которые могут оказаться полезными:

  • Если у вас есть доступ к источнику .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 -> (модуль $, $ экспонента, $ d, $ p, $ q)
    # Выводит его в стандартной двоичной форме (DER), которую должен поддерживать PHP. выведите $ privateKey-> get_private_key_string ()
    # Если вам нужен PEM, openssl может его конвертировать.

Извините, я не смог найти решение для PHP. Надеемся, что решение C # будет работать, хотя.

...