原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處
昨夜群里爭了一波加密算法,于是今日就來一波加密
因為目前還不涉及到后臺,所以就不討論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