CryptoJS库DES解密问题
后端对手机号码进行des加密(java实现),再用base64进行编码返回给前端;
前端使用CryptoJS库进行base64解码,再用DES解密,但解密出来的结果是手机号码的后三位,为什么会出现这种结果?有经验的麻烦给指导下
var key = '12345678';
var iv= [1,1,1,1,1,1,1,1];
function decryptByDES(ciphertext, key,iv) {
ciphertext = CryptoJS.enc.Base64.parse(ciphertext);
var keyHex = CryptoJS.enc.Utf8.parse(key);
var decrypted = CryptoJS.DES.decrypt(ciphertext, key, {
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
iv: iv
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
猜测应该是后端Java代码中DES加密的问题,看不到代码只能猜了。看密钥的长度应该是单倍DES算法,分块为8字节,手机号码11字节,分块为8、3,既然你只能收到手机号码的后三位,那可能就是后端分块加密完之后没有拼接,而是直接把最后一块当成结果返回了。
根据题主的回复,应该是最后的转码的问题。decrypted应该是一个bytes数组,对bytes数组直接解码的话会导致非法的ascii字符被丢弃。