我正在构建两个应用程序,一个在C#中,另一个在Java中,都将使用RSA进行加密和解密。
当我使用JAVA进行加密并使用C#进行解密时,它可以完美地工作,当在C#应用程序上进行加密并在Java中解密时会出现问题,这会引发此错误:
javax.crypto.IllegalBlockSizeException: Data must not be longer than 64 bytes
我使用带有512位RSA的RSA在两侧创建密钥,增加到1048会更改错误,表明大小不能超过128个字节。
爪哇:
public String decrypt(String message, RSAPrivateKey key) {
try {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] dataEncripted =Base64.decodeBase64(message.getBytes());
byte[] data = cipher.doFinal(dataEncripted);
return new String(data,"UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
}
C#:
public static string Encrypt(string data, string publicKey)
{
var sb = string.Empty;
try
{
var rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicKey);
byte[] encryptedByteArray;
byte[] dataToEncrypt;
dataToEncrypt = Encoding.ASCII.GetBytes(data);
encryptedByteArray = rsa.Encrypt(dataToEncrypt, false);
sb = Convert.ToBase64String(encryptedByteArray);
}
}
我注意到的是有效的过程,JAVA - > C#,当加密时,数组从0到63(64字节),但在另一个进程C# - > JAVA,加密数据从0到64(65字节)
这里是解码arrayBytes数字后在java中显示的图像:
如何让RSA C#提供程序生成一个等于Java中的字节数组?或任何有关如何解决这个问题的见解?