DES
-
美国 数据加密标准(DES)是对称密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。密钥较短,加密处理简单,加解密速度快,适用于加密大量数据的场合。
- 前端有时把数据传给后端,也是需要加密的,这里介绍下des加密:
DES 加密算法为最为常见的分组加密算法。其主要思想在于数据位的置换与移位过程,通过16次的迭代加密与最终的逆置换得出最终的密文。DES 的解密方式只需按照加密的逆过程求解即可。由于DES 加密过程的算法是公开的,所以密钥K的保密就显得尤为重要,只有发送方与接收方采用相同的密钥进行加密解密才能获取明文数据。 -
使用场景:由于算法效率较高,一般用于对效率有要求的实时数据加密通信。比如在使用 VPN 或者代理进行 加密通信时,既要保证数据的保密性,又要保证不能有高的延迟,所以通常会使用对称加密算法。
-
vue中的使用
- 安装依赖 npm install crypto-js
- 在对应的文件中引入 import cryptoJs from 'crypto-js';
- 进行加解密操作
/*
* message:需要加密的字符串,对象加密需要转成json字符串
* key: 密钥(加密解密密钥同一个)
*/
export function encryptDes (message, key = 'xxxxxxxxxxxxxxxxxxxxx') {
const keyHex = cryptoJs.enc.Utf8.parse(key)
const option = { mode: cryptoJs.mode.ECB, padding: cryptoJs.pad.Pkcs7 }
const encrypted = cryptoJs.DES.encrypt(message, keyHex, option)
let data = encrypted.ciphertext.toString() // 返回hex格式密文,如需返回base64格式:encrypted.toString()
return data
}
/*
* message:需要解密的字符串,
* key: 密钥(加密解密密钥同一个)
*/
export function decryptDes (message, key = 'xxxxxxxxxxxxxx') {
const keyHex = cryptoJs.enc.Utf8.parse(key)
const decrypted = cryptoJs.DES.decrypt(
{
ciphertext: cryptoJs.enc.Hex.parse(message)
},// 若message是base64格式,则无需转16进制hex,直接传入message即可
keyHex,
{
mode: cryptoJs.mode.ECB,
padding: cryptoJs.pad.Pkcs7
}
)
let data = decrypted.toString(cryptoJs.enc.Utf8)
return data
}
RSA
-
RSA是 非对称算法,加密密钥和解密密钥是不一样的,或者说不能由其中一个密钥推导出另一个密钥。密钥尺寸大,加解密速度慢,一般用来加密少量数据,比如DES的密钥。
- 公钥和私钥都可用于加密和解密。公钥和私钥都可以用于加解密操作,用公钥加密的数据只能由对应的私钥解密,反之亦然。虽说两者都可用于加密,但是不同场景使用不同的密钥来加密,规则如下:
-
私钥用于签名、公钥用于验签。
签名和加密作用不同,签名并不是为了保密,而是为了保证这个签名是由特定的某个人签名的,而不是被其它人伪造的签名,所以私钥的私有性就适合用在签名用途上。
私钥签名后,只能由对应的公钥解密,公钥又是公开的(很多人可持有),所以这些人拿着公钥来解密,解密成功后就能判断出是持有私钥的人做的签名,验证了身份合法性。 -
公钥用于加密、私钥用于解密,这才能起到加密作用。
因为公钥是公开的,很多人可以持有公钥。若用私钥加密,那所有持有公钥的人都可以进行解密,这是不安全的!
若用公钥加密,那只能由私钥解密,而私钥是私有不公开的,只能由特定的私钥持有人解密,保证的数据的安全性。 -
使用场景:主要用于秘钥交换,证书等场景。
-
vue中的使用
- 安装依赖 npm install jsencrypt --save
- 在对应的文件中引入 import JSEncrypt from 'jsencrypt';
- 进行加解密操作
//加密
//str 未加密字符串
export function getEncryCode(str){
//实例化JSEncrypt
let jse = new JSEncrypt();
//加密公钥(由服务端生成)
let pubKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmBjTNoNbIjrZVoEt5OBNM6zZ/
yDZ7wgv53A6ekTuAsqfJ3jXmLC7PqqrJxgqqDf2l72CnRC8ZxIAkiUBmIK/FIDrl
qCBPl1h0Ym8qPLmUuv5l3xmhlb6+a/v22444PW/U6Ur0l1BvbCorrsWV3leFFfLZ
5oT4mq9jXzkQLv8F6wIDAQAB
-----END PUBLIC KEY-----`
jse.setPublicKey(pubKey);
let data = jse.encrypt(str.toString()); // 进行加密
return data;
}
//解密
//params 待解密字符串
export function sendEncryCode(params){
//实例化JSEncrypt
let jse = new JSEncrypt();
//使用前端私钥解密(私钥由服务端生成)
let privKey = `-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKYGNM2g1siOtlWg
S3k4E0zrNn/INnvCC/ncDp6RO4Cyp8neNeYsLs+qqsnGCqoN/aXvYKdELxnEgCSJ
QGYgr8UgOuWoIE+XWHRibyo8uZS6/mXfGaGVvr5r+/bbjjg9b9TpSvSXUG9sKiuu
xZXeV4UV8tnmhPiar2NfORAu/wXrAgMBAAECf0qUfyPgHJv7f+z3FPBfQExNXS4J
wm/Vu4uCTw7sLs6hcr48E/pR3rVq9U2uqRu7LTZdUg3Rk1b/7pB7F3LJPCuX5n/t
nqcEWfWoyAc6wnVLffxkvx7toD7nMl7+2/LsUgSiY/QFdG43dKs+5rXuEOOwcZV/
tLdivN9SEN44mEECQQDXls/rpMPYnd0IHHqh6YZEA3dH1CZAWeW/4XF/BINW/02m
jtoNr+sTcZN9ekaLFTQnF/jJRi35dNwGhroG+k/hAkEAxST9oYDugGPTbu81JU1p
nO8tLQPHvpVu3lGQEFahWZi6j70FlhNEhX74lDLrhvTOI4ohzHX28pU5TbQkiyl/
SwJBALxQseHmFGR80HurVLtlnrB+TozhlWAUpolLRbZrnMY7T/qzQWk/Rxm+1dR/
IGuQ4/NaDyjRMot6Nk9FE+3QbEECQQCXib+MDVdHSXSUqTro2YB9KTxIhcdcL/Fw
4rEiXfTYshV1t447tcPN+bOJ9zokGrj5iIxCZcrU3O+XUwlkDxnRAkArwYiJZFlS
Lu9zj+e03+kGWu6c/x8RRoLqfZcWFffBZlkxOHa06aN6jYCdJtRON43JUbynMvDY
l5glkcwnZlbi
-----END PRIVATE KEY-----`
jse.setPrivateKey(privKey);
let data = jse.decrypt(params); //解密
return data;
}
SHA1
- SHA1 和 MD5 是 散列算法,将任意大小的数据映射到一个较小的、固定长度的唯一值。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为 雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。MD5 比 SHA1 大约快 33%。
- 使用场景:多用于密码储存
- 安装依赖 npm install sha1 --save
- 在对应的文件中引入 import sha1 from 'js-sha1'
- 进行加密操作
-
vue中的使用
export function getEncryCode(params){
//进行sha1加密
let data = sha1(params)
return data;
}
MD5
-
MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法。
- 一般登录的用户密码是用md5加密,系统中保存的也是加密后的用户密码,系统并不知道具体的用户密码是什么。
- MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
-
使用场景:多用于密码储存
- 安装依赖 npm install js-md5 -D
- 在对应的文件中引入 mport md5 from 'js-md5'
- 进行加密操作
-
vue中的使用
export function getEncryCode(params){
//进行md5加密
let data = md5(params)
return data;
}
————————————————
原文链接:https://blog.csdn.net/weixin_43359799/article/details/120156259