Rsa C#加密和java解密

时间:2016-09-05 13:57:27

标签: java c# encryption rsa

我正在构建两个应用程序,一个在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中显示的图像:

Bytes java

如何让RSA C#提供程序生成一个等于Java中的字节数组?或任何有关如何解决这个问题的见解?

0 个答案:

没有答案