我想在客户端加密一些数据并在服务器端解密它,但它在服务器端出错,说“键不正确”。
以下是我的代码片段
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);
答案 0 :(得分:0)
密文包含随机字节,并非所有字节都可以表示为(UTF-8)字符。所以:
var encrypteData=encrypted.toString(CryptoJS.enc.utf8);
可能会引入或遗漏字符,这意味着在Java端未正确接收密文。请确保您对所有需要由文本表示的字节进行64编码,如果需要将文本转换为字节,请始终指定字符编码。