精华

微信小程序填坑之路之加密算法

  • • 发表于 8年前
  • • 作者 toBeMN
  • • 14601 人浏览
  • • 6 条评论
  • • 最后编辑时间 8年前
  • • 来自 [技 术]

原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处

昨夜群里争了一波加密算法,于是今日就来一波加密
因为目前还不涉及到后台,所以就不讨论java,php等的加密方式,就说JS的加密方式(方式大同小异)

经过网上一顿搜索,收集到了4个加密算法(md5,sha1,aes,base64)的脚本,也是自己都用过的,经过一点修改,将其利用在小程序上,供大家参考

加密算法分为两种:
一种是对称加密算法(aes可逆),一种是非对称加密算法(没研究,自己搜,哈哈)

而(md5,sha1不可逆)其实属于哈希算法,所以很多人认为这并不是加密算法,不过这无关痛痒,我们只要知道怎么用它,在哪里用即可,这是填坑,不是学术论文,有兴趣的朋友就自行研究吧,常见的项目会对用户的密码进行此算法的加密,其验证的方法是将用户输入的密码进行一次加密后跟在跟数据库中已经加密完的密码进行比对

base64(可逆)就更不用说了,只是一种编码形式而以,这里要讨论的是它字符串的加密,当然更多的用途是将图片转换成base64编码格式,所以就可以有这么个用途:直接在数据库中存储图片的base64编码,代替以往存储图片路径的形式。

当然这都是循规蹈矩的加密方式,想要花样,可以来个双重md5加密,甚至几种加密方式“嵌套使用”,让密文变得乱七八糟
温馨提示:使用不可逆加密的时候自己要记住明文密码,免得测试测着自己忘记了密码

开始案例:
项目目录结构

四种加密算法的脚本都放在utils文件下,在主文件引入一下

var fun_md5 = require('../../utils/md5.js')
var fun_sha1 = require('../../utils/sha1.js')
var fun_base64 = require('../../utils/base64.js')
var fun_aes = require('../../utils/aes.js')

接下来只要调用相应方法即可

//md5加密
var str_md5 = fun_md5.hex_md5("你叫MINA?")
//sha1加密
var str_sha1 = fun_sha1.hex_sha1("你叫MINA?")
var obj_base64 = new fun_base64.Base64();
//base64加密
var str_base64_encode = obj_base64.encode("你叫MINA?");
//base64解密
var str_base64_decode = obj_base64.decode(str_base64_encode);

对于aes加密比较特殊一点,需要密钥(yue)和密钥偏移量
并且封装了加密解密的方法

//十六位十六进制数作为秘钥
var key = fun_aes.CryptoJS.enc.Utf8.parse("3454345434543454");  
//十六位十六进制数作为秘钥偏移量
var iv  = fun_aes.CryptoJS.enc.Utf8.parse('6666666666666666'); 
Encrypt: function (word) {
    var srcs = fun_aes.CryptoJS.enc.Utf8.parse(word);
    var encrypted = fun_aes.CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: fun_aes.CryptoJS.mode.CBC, padding: fun_aes.CryptoJS.pad.Pkcs7 });
    return encrypted.ciphertext.toString().toUpperCase();
},
Decrypt: function (word) {
    var encryptedHexStr = fun_aes.CryptoJS.enc.Hex.parse(word);
    var srcs = fun_aes.CryptoJS.enc.Base64.stringify(encryptedHexStr);
    var decrypt = fun_aes.CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: fun_aes.CryptoJS.mode.CBC, padding: fun_aes.CryptoJS.pad.Pkcs7 });
    var decryptedStr = decrypt.toString(fun_aes.CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}

开发过程中要小心不要暴露出key,不然这是求破解
最终效果:

项目coding地址:https://git.coding.net/toBeMN/MINA-de-encode.git

分享到:
6条评论
Ctrl+Enter
作者

toBeMN

toBeMN

APP:3 帖子:24 回复:59 积分:3193

已加入社区[2898]天

梦想成为全栈的男人

作者详情》
Top