如何解决RSA加密/解密问题:.Net中的加密文本未在Java中解密
|| 我在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,tempBytes.Length );
byte[] encryptedBytes = rsaCryptoServiceProvider.Encrypt( tempBytes,true );
Array.Reverse( encryptedBytes );
stringBuilder.Append( Convert.ToBase64String( encryptedBytes ) );
}
return stringBuilder.ToString();
}
用于解密的代码是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);
我在这里想念什么吗?如何进行双向加密/解密?
解决方法
这可能会有所帮助:
http://jafetsanchez.com/post/7562162652/rijndael-on-c-and-java
,您的C#应用程序使用OAEP填充PKSC v2,而Java使用PKSC v1.5尝试将C#代码更改为:
ptedBytes = rsaCryptoServiceProvider.Encrypt( tempBytes,false );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。