微信小程序之使用加密算法

Author Avatar
云璃 2017年09月29日

说到底,还是怼网易云音乐怼的很 happy。

参考 网易云 API 加密 ,要使用 AES 加密,一开始的想法是自己写 API 放到服务器上,后面想了想,直接用小程序实现该多么美妙。

嗯,先来解决第一步,小程序使用加密算法。

目前加密算法主要是:md5,sha1,aes,base64.

加密算法分为两种:

一种是对称加密算法,一种是非对称加密算法。

md5,sha1 不可逆,属于哈希算法,常见的项目会对用户的密码进行此算法的加密,其验证的方法是将用户输入的密码进行一次加密后跟在跟数据库中已经加密完的密码进行比对

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

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

废话不多说,开始案例:

项目目录

20170929172257.png

四种加密算法的脚本都放在 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("种花家的云璃")
//sha1加密
var str_sha1 = fun_sha1.hex_sha1("种花家的云璃")
var obj_base64 = new fun_base64.Base64();
//base64加密
var str_base64_encode = obj_base64.encode("种花家的云璃");
//base64解密
var str_base64_decode = obj_base64.decode(str_base64_encode);

对于 aes 加密比较特殊一点,需要密钥(yue)和密钥偏移量
并且封装了加密解密的方法(因 wiki 上为双重加密,此次 demo 使用双重加密)。

//十六位十六进制数作为秘钥
var key = fun_aes.CryptoJS.enc.Utf8.parse("0CoJUm6Qyw8W8jud");  
//十六位十六进制数作为秘钥偏移量
var iv = fun_aes.CryptoJS.enc.Utf8.parse('0102030405060708');
//aes加密
var str_aes_encode = this.Encrypt(this.Encrypt('种花家的云璃',key),key)
//aes解密
var str_aes_decode = this.Decrypt(this.Decrypt(str_aes_encode,key), key);
Encrypt: function (word, key) {
    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, key) {
    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();
  }

最终效果

20170929172939.png

注:
开发过程中要小心不要暴露出 key,不然这是求破解。

本文链接:https://www.masterzc.cn/archives/38.html
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处

Title - Artist
0:00