使用CryptoJS进行加密并在java端进行解密?

时间:2014-08-12 09:19:16

标签: java security encryption cryptography cryptojs

我想在客户端加密一些数据并在服务器端解密它,但它在服务器端出错,说“键不正确”。

以下是我的代码片段

var key = "randomKey";

        var hash  = CryptoJS.MD5(key);

        var hashedKey = btoa(hash.toString(CryptoJS.enc.Base64));

        var iv  = "1234567812345678";
        var message   = "#This is the plain text to encrypt#";


        var encrypted = CryptoJS.AES.encrypt(message, hashedKey, {iv : iv, mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7} );


        var encrypteData=encrypted.toString(CryptoJS.enc.utf8);

这就是我在客户端加密的方式。并将“iv”,“hashedKey”和“encryptedData”发送到服务器端。

我们正在使用java在服务器端解密此加密数据。 我们正在使用AES / CBC / PKCS5Pading。 通过传递iv,密钥和加密消息到“doFinal”方法但我们收到错误消息“给定最终块没有正确填充”

编辑 -

Cipher decrypt = Cipher.getInstance("AES/CBC/PKCS5Padding");
                decrypt.init(Cipher.DECRYPT_MODE, hashedKey,iv);
        byte[] decryptedMsg = decrypt.doFinal(encryptedMsg);

1 个答案:

答案 0 :(得分:0)

密文包含随机字节,并非所有字节都可以表示为(UTF-8)字符。所以:

var encrypteData=encrypted.toString(CryptoJS.enc.utf8);

可能会引入或遗漏字符,这意味着在Java端未正确接收密文。请确保您对所有需要由文本表示的字节进行64编码,如果需要将文本转换为字节,请始终指定字符编码。