加密算法--node + aes +iv 偏移量实现加密

    在互联网发展迅速的同时,我们必须注重传输的数据的准确和安全。提到数据的安全,我们会想到很多加密:数字认证、MD5 加密,aes加密,des加密……或许你还能想到很多,虽然名称不同,但最终目标是一致的,都为了保护数据的完整、安全和准确性。今天小编就带着大家一起来认识其中的一种--aes + iv偏移量;

背景:

    生活中的很多时候,大家都是收到不同形式的陌生推销,这归根结底就是对数据的保护程度。虽然,数据库中存储的密码都是加密后存储的,但是我们仍需注意在传输过程中密码的加密,避免密码的明文传输。在这里,小编选择的是aes + node ;

加密架构:

   js + aes +node js + java 程序;主要的实现流程,对js获取到的用户名和密码使用aes + iv偏移量的方式进行加密。所以我们需要在node js中引入aes.js文件和base64 (这个转码文件主要是为了与java后台实现相同的编码);

主要工作

    在项目中添加aes.js文件(该文件有1,2之分,具体需求视个人情况而定);

    在node的启动文件中添加对aes.js文件的引用,并在main.js中添加一个加密和解密的方法:

<span style="font-family:KaiTi_GB2312;font-size:18px;">  yx.encrypt = function (word,key) {
        var key1 = CryptoJS.enc.Utf8.parse(key.k);
        var iv1  = CryptoJS.enc.Utf8.parse(key.i);
        var srcs = CryptoJS.enc.Utf8.parse(word);
        /*var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode:CryptoJS.mode.CBC});*/
        var encrypted = CryptoJS.AES.encrypt(srcs, key1, { iv: iv1, mode:CryptoJS.mode.CBC})
        return encrypted.toString();
    }

    yx.decrypt = function (word) {
        var encryptedHexStr = CryptoJS.enc.Hex.parse(word);
        var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        var decrypt = CryptoJS.AES.decrypt(srcs,  this.key.k, {iv:  this.key.i, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
        var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
        return decryptedStr.toString();
    }</span>
     加密方法的key参数是在login.js中定义的具备key和iv两个属性的实体变量,注意:key的长度为16位,iv为16位的倍数(至少一倍);

    方法添加完毕后,我们需要在login文件中定义key和iv的组成规则,但需要我们注意的是,如果组成的规则中有不固定长度的变量串,一定要对不同长度进行不同的拼接规则,且这个规则一定要和Java后台使用的规则相对应,尤其是utf8编码,mode:CryptoJS.mode.CBC,base64 编码(这个编码主要是为了对+ ,=等特殊字符不转译);

    上述代码弄好之后,Java的后端程序中根据相应的规则去解密即可;

注意事项:

   1.加密过程中,前端和后端的加密和解密的步骤必须是互逆的,否则生成的串不能被正常解密;

   2.前端加密i过程中,能用var声明的变量传输的要避免直接使用对象传输,比如:在encrypt加密方法中,如果我们直接使用key.k 和key.i 直接在CryptoJS.AES.encrypt方法的参数中赋值,会发现,加密串的数组无法被后端直接解密(iv加密后的串会出现17位,数组中出现了五个元素,正常情况下应该是4个元素,一共16位);

   3.前端指定了使用的mode模式,Java后端需要指定相应的mode;

   至此,关于前端aes+ iv偏移量加密的算法就实现了,我们可以在一定程度上保证数据的安全性;避免明文传输主要是提高数据在传输过程中的安全程度;

   



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值