对称加密和非对称加密的区别与使用

168 阅读2分钟

主要介绍两种加密方法:对称加密和非对称加密 对称加密:加密和解密过程使用同一个秘钥。加密过程等价于用原文+秘钥得到传输的密文,解密过程等价于密文+秘钥推导出原文。 常见算法有:DES、AES... 优点:加密和解密速度较快,耗时短,适合数据较长时使用;秘钥可自定义。 缺点:无法保证秘钥被安全传递,密文在传输过程中可能被第三方截获,如果秘钥也被截获,则传输的密码信息会被推导出,安全性较低

AES秘钥在线

const CryptoJS = require('crypto-js')
// AES加密
function aesEncrypt(data, keys, ivs) {
	 const res = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(keys), {
	    iv: CryptoJS.enc.Utf8.parse(ivs), // 偏移量,可不加
	    mode: CryptoJS.mode.CBC, // 加密模式
	    padding: CryptoJS.pad.Pkcs7, // 填充方式
	 })
	 return res.toString()
}

// AES解密
function desDecrypt(data, keys, ivs) {
	const res = CryptoJS.AES.decrypt(data, CryptoJS.enc.Utf8.parse(keys), {
	    iv: CryptoJS.enc.Utf8.parse(ivs), // 偏移量,可不加
	    mode: CryptoJS.mode.CBC, // 解密模式
	    padding: CryptoJS.pad.Pkcs7, // 填充方式
	 })
	 return res.toString()
}

非对称加密:加密和解密过程使用两个秘钥,一般使用公钥进行加密,私钥进行解密。 常见算法有:RSA、背包算法、ECC... 优点:使用一对秘钥,公钥用来加密,私钥用来解密,不需要像对称加密那样同步秘钥,而且只能通过私钥来推导公钥,反之则不能,安全性较高。 缺点:加密和解密花费的时间较长、速度较慢,适合对少量数据的使用。

RSA秘钥在线生成

import JSEncrypt from 'jsencrypt'
const pubKey = 'xxx' // 公钥
const priKey = 'xxx' // 秘钥
// RSA加密
function rsaEncrypt(data){
	const encrypt = new JSEncrypt()  // 创建加密对象实例
	encrypt.setPublicKey(pubKey) // 设置公钥
	return encrypt.encrypt(data) // 对内容加密 
}

// RSA解密
function rsaDecrypt(data){
	const decrypt = new JSEncrypt()  // 创建加密对象实例
	decrypt.setPrivateKey(priKey) // 设置秘钥
	return decrypt.decrypt(data) // 对加密内容解密 
}

非对称加密和对称加密的区别 前端利用jsencrypt.js进行RSA加密