我在我的android應用程序上生成了一對RSA密鑰。RSA和AES解密和加密問題
我從網絡服務接收 - AES密鑰,使用我的RSA公鑰 加密 - 使用AES密鑰編碼的字符串。
所以我必須做到以下幾點: - 解密AES密鑰 - 用獲得的AES密鑰解密字符串。
要生成的RSA密鑰我所做的:
keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(size);
keypair = keyGen.genKeyPair();
privateKey = keypair.getPrivate();
publicKey = keypair.getPublic();
在RSA解密我用:
public static byte[] decryptRSA(PrivateKey key, byte[] text) throws Exception
{
byte[] dectyptedText = null;
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
dectyptedText = cipher.doFinal(text);
return dectyptedText;
}
在AES解密我用:
public static byte[] decryptAES(byte[] key, byte[] text) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(text);
return decrypted;
}
所以,在我的代碼,以獲得解密的AES密鑰I do
byte[] decryptedAESKey = sm.decryptRSA(key, Base64.decode(ReceivedBase64EncryptedAESKey));
byte[] decryptedString = sm.decryptAES(decryptedAESKey, Base64.decode(ReceivedEncryptedAESString));
最後,我得到一個null爲decryptedString。 我在做什麼錯?
我使用的Android,其包含的庫。 1.看起來不錯,例如我收到ReceivedEncryptedAESString = qjYcPCHkFpbTjntDCpXCGabSY5DFH ...並且解密的AES密鑰看起來像:[121,98,51,100,108,112,118,107,118,97] – Alin 2010-09-13 15:50:35
2.問題似乎是在cipher.init(Cipher.DECRYPT_MODE,skeySpec);因爲它引發一個異常:InvalidKeyException:密鑰長度不是128/192/256位。也許我做RSA解密是錯誤的? – Alin 2010-09-13 16:00:55
關鍵數組有多長?它可能太短(小於128位),需要某種填充,或者它太長,需要截斷。 AES僅在這三種密鑰長度上定義。由於這是從Web服務中檢索的字符串,因此您需要找出錯誤長度的原因。也許從Web服務的消息被截斷? – Amoss 2010-09-15 17:54:48