美文网首页让前端飞程序园Web前端之路
前端数据的加密和解密--对象解密的坑

前端数据的加密和解密--对象解密的坑

作者: 编程小世界 | 来源:发表于2019-07-27 19:39 被阅读2次

作为一个前端菜鸡,今天碰到一个加密解密的坑,浪费了不少时间. 为了报仇,我决定再次拿起我的小本本,君子报仇十年不晚,先记下来.

先说坑,加密解密前端工作中很常见. 之前也加密过密码账户之类的, 一切都顺畅无比,比如:

//vue中mounted:function(){letx = encryptDes("123",this.$enkey);//加密letx2 = decryptDes(x,this.$enkey);//解密console.log(x);console.log(x2);}

输出结果:(看吧一切都那么顺利)

就在今天当我加密要一个 "对象" 的时候......出现了问题:

letobj = {test:123};console.log(JSON.stringify(obj));letx = encryptDes(JSON.stringify(obj),this.$enkey);letx2 = decryptDes(x,this.$enkey);console.log(x);console.log(x2);

结果输出了个这么个鬼东西:

这不科学啊,由于菜鸡是真的菜,导致我根本没见过这鬼东西,百度完了,丝毫没有线索,菜鸡我开始怀疑人生,突然灵光一现,难道就因为菜鸡我没 "对象" ? obj=null了?

问了哈旁边后台的一个同事.说应该字符串的编码之类的问题 ,结果再用url解码解了下真的有结果:( JS中对URL进行转码与解码 )

letobj = {test:123};console.log(JSON.stringify(obj));letx = encryptDes(JSON.stringify(obj),this.$enkey);letx2 = decryptDes(x,this.$enkey);console.log(x);console.log(x2);console.log(unescape(x2));

果然不是obj=null的事.

附加密的封装:

importcryptoJsfrom"crypto-js";functionstringToHex(str){varval="";for(vari =0; i < str.length; i++){if(val =="")        val = str.charCodeAt(i).toString(16);elseval +=","+ str.charCodeAt(i).toString(16);    }returnval;  }//base64加密exportconstencryptBase64 =(message)=>{varstr = cryptoJs.enc.Utf8.parse(message);varencryptMsg = cryptoJs.enc.Base64.stringify(str);returnencryptMsg}//base64解密exportconstdecryptBase64 =(message)=>{vardecryptMsg = cryptoJs.enc.Base64.parse(message);varparseStr = decryptMsg.toString(cryptoJs.enc.Utf8);returnparseStr}// DES加密密exportconstencryptDes =(message, key) =>{  message =encodeURIComponent(message)  key =encodeURIComponent(key)varkeyHex = cryptoJs.enc.Utf8.parse(key)varivHex = cryptoJs.enc.Utf8.parse(key)varoption = {iv: ivHex,mode: cryptoJs.mode.CBC,padding: cryptoJs.pad.Pkcs7}varencrypted = cryptoJs.DES.encrypt(message, keyHex, option)varmsg = (encrypted.ciphertext.toString())varb=msg.toUpperCase();return(b)}// DES解密exportconstdecryptDes =(message, key) =>{varkeyHex = cryptoJs.enc.Utf8.parse(key)varivHex = cryptoJs.enc.Utf8.parse(key)vardecrypted = cryptoJs.DES.decrypt(    {ciphertext: cryptoJs.enc.Hex.parse(message)    },    keyHex,    {iv: ivHex,mode: cryptoJs.mode.CBC,padding: cryptoJs.pad.Pkcs7    }  )returndecrypted.toString(cryptoJs.enc.Utf8)}

如果有想学习编程的初学者,可来我们的前端直播授课群的哦:571671034里面免费送整套系统的前端教程!

相关文章

  • 前端数据的加密和解密--对象解密的坑

    作为一个前端菜鸡,今天碰到一个加密解密的坑,浪费了不少时间. 为了报仇,我决定再次拿起我的小本本,君子报仇十年不晚...

  • RSA加密解密-公钥解密

    技术:jsencrypt.js这个前端库有一个特点:公钥加密、私钥解密,没有公钥解密(只能前端公钥加密后台私钥解密...

  • 登录密码校验

    RAS加密 生成公、私钥 公钥给前端,用来加密密码 私钥存储在服务端,用来解密密码 数据库加密存储 解密通过后,通...

  • AES+RSA加密联合使用

    AES+RSA加密联合使用 使用原因: 因为加密解密效率的问题 使用方式前端:前端对需要加密的数据进性AES加密,...

  • crypto-js实现加密解密

    1、DES加密 2、DES解密 3、AES加密 4、AES解密 5、注意:js的前端加密不能与java加密代码写的...

  • JAVA加解密11-对称加密算法-DES以及DESede算法

    一、简述对称加密算法就是能将数据加解密。加密的时候用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密。D...

  • 漫说数字签名digital signature(转载)

    前提:公钥和私钥是成对的,它们互相解密。加密数据:公钥加密,私钥解密数字签名:私钥加密,公钥解密 一、漫说公钥与私...

  • 基于aes的加解密方案

    对前端上送的报文进行解密和验签 1、前端上送的报文先进行整体加密,然后把整体加密的数据作为encodeFieldV...

  • 加密

    AES 加密 密钥生成 数据填充至16的倍数 AES 加密 BASE64 加密 解密 BASE64 解密 AES ...

  • 怎么在ios中应用“RSA的私钥加密或公钥加密算法”呢?

    RSA基本原理 RSA使用"秘匙对"对数据进行加密解密.在加密解密数据前,需要先生成公钥(public key)和...

网友评论

    本文标题:前端数据的加密和解密--对象解密的坑

    本文链接:https://www.haomeiwen.com/subject/aytyrctx.html