2011-04-15 24 views
0

我正在面臨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); 

我錯過這裏有什麼?我怎樣才能使雙方的加密/解密?

回答

1

而Java使用PKSC V1.5試着改變你的C#代碼使用OAEP填充PKSC V2你的C#應用​​程序:

ptedBytes = rsaCryptoServiceProvider.Encrypt(tempBytes, false); 
+0

我改變了代碼如你所說,但我仍然沒有得到正確的輸出。如果文本是「ABC」,我得到的解密字符串爲「A(3個未知字符)B(3個未知字符)C(3個未知字符)」。我在這裏錯過了什麼嗎? – dvl 2011-04-17 06:28:47