一、 什么是RSA加密?
- RSA是一种使用不同的加密密钥与解密密钥的体制,不对称加密算法。公钥加密,私钥解密。
- RSA算法是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,一般推荐使用1024位。
二、RSA秘钥生成方式
- 网站生成公钥和私钥
- Windows系统可以使用git命令行工具
- 单击鼠标右键——git bash here 调出git bash
- 生成私钥,密钥长度为1024bit
$ openssl genrsa -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
........++++++
.................++++++
e is 65537 (0x10001)
- 从私钥中提取公钥
$ openssl rsa -in private.pem -pubout -out public.pem
writing RSA key
- 生成了private.pem 和 public.pem两个文件,可以利用终端进行查看
$ cat private.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCb60UwTR+o+Cw91/rWFUlGkwdjr933uGus+7N5XkVTR03eikN0
fmISPZMjHBfORgfXKzm/e503npMNdzUGYpOcwbxcVmRK6kmL+T3++t0NSBiI0mFZ
cmdGph1oNDrNW+xU/ZytogiNW2c5z1o/MJxJvG/Wlvb0Vj3kM2Zywsc1OwIDAQAB
AoGAGwYxLMkBRskU6fcoS7jOxYOwUS/nOgtl5kqN9ehH/cIrFfpC7MsG9oBjoz84
RRFQRJQCY1Tqj/xVIo1ZzGyDhu+vo07RXBeOEv9QCOq/PqTca0q9u6hq9wAsTdUT
jBepfttgrDGICRFeVts3Vf4lDbXiQS6QZTQa9/9GRU16udECQQDIVA8hU0W+sBq8
PftMvWYFMWPG1TazCDHJ+r5GutO3bAPC74rstuoNQOq5kDzmvbkFHUUQPeUEFc+S
zI9oG7kzAkEAxz/NaT9hmOaqNB6jIr//J227v2qL240pHiPV6WmAdJLr3BkqgGV6
y/z4fBTClm1dPhiC289xzBQzUUllD7Xj2QJAVhFvcrTxSS0mP2wt1NmmxGJk6N9g
IelKYun86CyKm8qnjxAV0v//bPRQJKuozsYCgQUDUCgXhfrM9Ng4YNVQawJAFscQ
cGuyeIxGANdPxvUz8gn1YJiJjHvCq5NlLN3GtYzmMa8e0LbJJvCwZ17oL9IoyqR6
sS4x0CavByfgyb79YQJBAIRbZ/touiyyKOUVi1sVQ3reIFKQ7BnezluNxalmmceC
UfxbMitxGdeLsL8uz/OVneodYguZOVumdVVVW3cBSxk=
-----END RSA PRIVATE KEY-----
$ cat public.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb60UwTR+o+Cw91/rWFUlGkwdj
r933uGus+7N5XkVTR03eikN0fmISPZMjHBfORgfXKzm/e503npMNdzUGYpOcwbxc
VmRK6kmL+T3++t0NSBiI0mFZcmdGph1oNDrNW+xU/ZytogiNW2c5z1o/MJxJvG/W
lvb0Vj3kM2Zywsc1OwIDAQAB
-----END PUBLIC KEY-----
使用jsencrypt的步骤
1、下载jsencrypt
npm install jsencrypt
下载后查看package-lock.json文件查看jsencrypt是否下载成功及其版本
2、引入jsencrypt并且创建加密解密的方法rsaEncrypt.js
rsaEncrypt.js
import JSEncrypt from 'jsencrypt/bin/jsencrypt'
//公钥
const publicKey=''
//私钥
const privateKey=''
//公钥加密
export function encrypt(passwd){
const encryptor=new JSEncrypt()
encryptor.setPublicKey(publicKey)
return encryptor.encrypt(passwd)
}
//私钥解密
export function decrypt(passwd){
const encryptor=new JSEncrypt()
encryptor.setPrivateKey(privateKey)
return encryptor.decrypt(passwd)
}
3、应用rsaEncrypt.js方法
import { encrypt } from '@/utils/rsaEncrypt'
password=encrypt(password);//对密码进行加密
在用户注册或登录的时候,用公钥对密码进行加密,把加密后的密码传给后端,后端用私钥对加密的内容进行解密,然后进行密码校验或者保存到数据库。