我正在面臨Java解密中的問題。以下是遇到錯誤:RSA Encryption/Decryption問題:來自.Net的加密文本不能在Java中解密
javax.crypto.BadPaddingException: Blocktype mismatch: -127
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:311)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:255)
的文本在.net用下面的代碼加密:
public string EncryptString(string inputString, int dwKeySize, string xmlString)
{
RSACryptoServiceProvider rsaCryptoServiceProvider = new RSACryptoServiceProvider(dwKeySize);
rsaCryptoServiceProvider.FromXmlString(xmlString);
int keySize = dwKeySize/8;
byte[] bytes = Encoding.UTF32.GetBytes(inputString);
int maxLength = keySize - 42;
int dataLength = bytes.Length;
int iterations = dataLength/maxLength;
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i <= iterations; i++)
{
byte[] tempBytes = new byte[ (dataLength - maxLength * i > maxLength) ? maxLength : dataLength - maxLength * i ];
Buffer.BlockCopy(bytes, maxLength * i, tempBytes, 0, tempBytes.Length);
byte[] encryptedBytes = rsaCryptoServiceProvider.Encrypt(tempBytes, true);
Array.Reverse(encryptedBytes);
stringBuilder.Append(Convert.ToBase64String(encryptedBytes));
}
return stringBuilder.ToString();
}
爲decrytion的代碼是JAVA是:
PrivateKey privKey = readPrivateKey(); // reads the private key
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privKey);
byte[] encryptedBytes = Base64.decodeBase64(encryptedText.getBytes("UTF-32"));
encryptedBytes = reverse(b); // reverse the bytes
byte[] decrypted = cipher.doFinal(encryptedBytes);
return new String(decrypted);
我錯過這裏有什麼?我怎樣才能使雙方的加密/解密?
謝謝。它的工作 – dvl 2011-07-14 04:25:59
這似乎是一個斷開的鏈接。 – earlNameless 2012-09-06 03:01:47