【问题标题】:RSA Encryption/Decryption Issue: Encrypted Text from .Net not decrypting in JavaRSA 加密/解密问题:来自 .Net 的加密文本未在 Java 中解密
【发布时间】:2011-08-06 07:01:18
【问题描述】:

我在 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();
        }

解密代码是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);

我在这里遗漏了什么吗?如何进行双向加密/解密?

【问题讨论】:

    标签: java .net rsa encryption


    【解决方案1】:

    您的 C# 应用程序使用 OAEP 填充 PKSC v2,而 java 使用 PKSC v1.5 尝试将您的 C# 代码更改为:

    ptedBytes = rsaCryptoServiceProvider.Encrypt( tempBytes, false );
    

    【讨论】:

    • 我改变了你提到的代码,但我仍然没有得到正确的输出。如果文本是“ABC”,我得到的解密字符串是“A(3 个未知字符)B(3 个未知字符)C(3 个未知字符)”。我在这里错过了什么吗?
    【解决方案2】:

    【讨论】:

    • 这似乎是一个断开的链接。
    猜你喜欢
    • 2014-06-02
    • 2011-01-29
    • 1970-01-01
    • 2018-09-10
    • 2011-12-10
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多