InvalidKeyException при переносе и развертывании с использованием алгоритма RSA - PullRequest
0 голосов
/ 18 июля 2011

Я новичок в Java и хочу обернуть симметричный ключ, используя алгоритм RSA.В моем случае я не генерирую открытый ключ для переноса, но извлекаю открытый ключ из Microsoft Keystore.

// Encrypt the generated Symmetric AES Key using RSA cipher     
Cipher rsaCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", 
       ks.getProvider().getName()); rsaCipher.init(Cipher.WRAP_MODE, RSAPubKey);
byte[] encryptedSymmKey = rsaCipher.wrap(aeskey);

Я получаю исключение InvalidKeyException, как показано ниже:

Exception in thread "main" java.security.InvalidKeyException: Unsupported key type: Sun RSA public key, 1024 bits
  modulus: 171871587533146191561538456391418351861663300588728159334223437391061141885590024223283480319626015611710315581642512941578588886825766256507714725820048129123720143461110410353346492039350478625370269565346566901446816729164309038944197418238814947654954590754593726047828813400082450341775203029183105860831
  public exponent: 65537
    at sun.security.mscapi.RSACipher.init(RSACipher.java:176)
    at sun.security.mscapi.RSACipher.engineInit(RSACipher.java:129)
    at javax.crypto.Cipher.init(DashoA13*..)
    at javax.crypto.Cipher.init(DashoA13*..)
    at com.sap.srm.crpto.client.applet.CryptoClass.main(CryptoClass.java:102)

Пожалуйстадайте мне знать, если у кого-нибудь есть какие-либо предложения по использованию SunMSCAPI?

1 Ответ

2 голосов
/ 18 июля 2011

Как говорится в сообщении об ошибке, вы используете Sun RSA public key. Это означает, что независимо от того, как вы извлекаете открытый ключ (код не указан, поэтому я не знаю), он не связан с хранилищем ключей MSCAPI. Я думаю, вы берете открытый ключ из сертификата. Поэтому один из способов решения вашей проблемы - использовать класс поставщика Cipher Sun для переноса ключа AES:

Cipher rsa = Cipher.getInstance("RSA/ECB/PKCS1Padding");
rsaCipher.init(Cipher.WRAP_MODE, RSAPubKey);
byte[] encryptedSymmKey = rsaCipher.wrap(aeskey);

Таким образом, в этом случае нет необходимости использовать MSCAPI для достижения вашей цели - вы можете использовать стандартных поставщиков.

...