MD5\SHA\AES\DES\RSA
MD5
加密:
var cry = require('crypto-js')
var aaaa = cry.MD5('待加密字符串').toString()
console.log(aaaa)
关于MD5的解密:
MD5密码是一种常用的数字摘要算法,它可以将任意长度的字符串转换成一个32位的散列值,常用于加密用户密码和文件完整性检查。但由于MD5密码是一种不可逆的加密方式,所以不能直接解密,只能通过穷举法或使用在线解密工具来解密。因为MD5的碰撞性,决定了存在两个不同的输入信息,其MD5相同的可能,因此不适用于安全性认证
SHA256加密(64位)
var cry = require('crypto-js')
var aaaa = cry.SHA256('待加密字符串').toString()
console.log(aaaa)
console.log(aaaa.length)
关于SHA256的解密:SHA256是散列算法,不是加密算法,不存在解密的问题。SHA256基本上是不可破解的,即找不到(或概率极小)“碰撞”结果。SHA256的256位密钥从未被泄露过,因此SHA256是牢不可破的函数。相对于MD5和SHA1而言,SHA256很安全。MD5就不一样了,单纯使用比较容易遭到撞库攻击。通过预先计算知道MD5的对应关系,存在数据库中,然后使用的时候反查,MD5就可能被解密。
自定义AES加解密函数(使用相同的密钥)
const key = CryptoJS.enc.Utf8.parse("秘钥"); //十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('偏移量'); //十六位十六进制数作为密钥偏移量
//解密方法
function Decrypt(word) {
let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
//加密方法
function Encrypt(word) {
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
}
//以上方法中 mode就是加密模式,padding是填充。
DES加密/解密
/DES加密
function encryptByDES(message, key){
var keyHex = CryptoJS.enc.Utf8.parse(key);
var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.ciphertext.toString();
}
//DES加密
function decryptByDES(ciphertext, key){
var keyHex = CryptoJS.enc.Utf8.parse(key);
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var result_value = decrypted.toString(CryptoJS.enc.Utf8);
return result_value;
}
var message = 'hello wold';//需要加密的数据
var key = '12345678';//加密key
//加密
desMessage = encryptByDES(message, key);
console.log(desMessage);
//解密
message = decryptByDES(desMessage,key)
console.log(message);
AES和DES之间的区别:
加密过程:在DES中,将明文分为两半,然后再进行进一步处理;而在AES中,整个块不进行除法,整个块一起处理以生成密文。
速度:相对而言,AES比DES快得多,能够在几秒钟内加密大型文件。
安全性:AES是一种比DES更安全的加密算法,具有更大的密钥大小并且运行更快。
RSA 经典的非对称加密算法
import JSEncrypt from 'jsencrypt'
// 加密
var encryptor = new JSEncrypt() // 创建加密对象实例
//公钥复
var pubKey = '-----BEGIN PUBLIC KEY-----MIGfMA0......AQAB-----END PUBLIC KEY-----'
encryptor.setPublicKey(pubKey)//设置公钥
var rsaPassWord = encryptor.encrypt('要加密的内容') // 对内容进行加密
// 解密
var decrypt = new JSEncrypt()//创建解密对象实例
//秘钥
var priKey = '-----BEGIN RSA PRIVATE KEY-----MIICXAIBA......AKBgQC1QQWRk=-----END RSA PRIVATE KEY----'
decrypt.setPrivateKey(priKey)//设置秘钥
var uncrypted = decrypt.decrypt(encrypted)//解密之前拿公钥加密的内容
需要获得相应的公钥或者私钥