Ключ шифрования, сгенерированный программой java, не принимается Microsoft encryption API

Мы сгенерировали открытый ключ RSA с помощью нашей Java-программы для шифрования данных на C ++ перед их передачей, но когда мы используем этот ключ для шифрования данных с помощью Microsoft encryption API, он не принимает этот ключ.

У кого-нибудь есть идеи по этому поводу?


person Nisha    schedule 27.01.2010    source источник
comment
Возможно, для M $ API требуется двоичный ключ, а ключ, который вы ему даете, представляет собой ключевой блок в кодировке base64. Или наоборот. Какое сообщение об ошибке выдает?   -  person amphetamachine    schedule 27.01.2010
comment
Лучший шанс получить помощь - это показать нам полный пример - включая данные - кода, который не принимает ключ.   -  person Rasmus Faber    schedule 27.01.2010


Ответы (2)


Код Microsoft имеет некоторые внутренние ограничения на то, какие ключи RSA он может использовать: он требует, чтобы длина открытого ключа (длина модуля в битах) была кратной 16, а открытый показатель степени должен соответствовать 32-битному целому числу без знака.

Однако большинство ключей RSA соответствуют этим ограничениям, и обычно возникают проблемы с кодированием / декодированием. Java имеет тенденцию везде использовать прямой порядок байтов, потому что:

  • это то, что предписано правилами кодирования на основе ASN.1;
  • Java принадлежит Sun, которая давно имеет дело с оборудованием с прямым порядком байтов (68020, Sparc).

С другой стороны, Microsoft CryptoAPI требует прямого порядка байтов. Возможно, вы использовали свой общедоступный модуль в неправильном порядке.

person Thomas Pornin    schedule 27.01.2010

По моему опыту, сериализация ключа RSA отличается в Java и MS.

Но я использовал для этого Bouncy Castle API, поскольку у них есть версии Java и .NET их библиотеки.

Дополнительные параметры вы можете найти в этом вопросе: RSA: как сгенерировать закрытый ключ на java и использовать его на C #?

person James Black    schedule 02.08.2010