Node和浏览器端使用RSA加密解密
最近在做一个登录注册的功能。在注册和修改密码的时候,用户的密码是有强度要求的(防止别人暴力破解)。所以在前后端都要校验密码的强度。为了密码安全地传递到服务端。我尝试使用 RSA 这种非对称密码技术来解决。用户在浏览器(客户端)输入的密码通过公钥加密传递到服务端,服务端使用私钥解密,然后服务端就可以校验密码的强度和安全存储处理。
Node 的 RSA 加密解密
Node 的 crypto
模块封装了openssl。提供了丰富的加密解密功能。下面的这两个函数就可以满足要求
publicEncrypt(public_key: string | RsaPublicKey, buffer: Buffer): Buffer
公钥加密privateDecrypt(private_key: string | RsaPrivateKey, buffer: Buffer): Buffer
私钥解密。
实例1:Node 的 RSA 加密解密
使用 openssl 生成私钥和公钥
下面的步骤必须在 terminal (Unix based OS) 下面一步一步的进行
# 生成私钥
openssl genrsa -out rsa_1024_priv.pem 1024
# 查看生成的私钥
cat rsa_1024_priv.pem
# 根据上面的私钥生成公钥
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
# 查看生成的公钥
cat rsa_1024_pub.pem
下面的代码演示RSA的公钥加密、私钥解密的流程:
var publicKey = fs.readFileSync('./rsa_1024_pub.pem', "utf8")
var privateKey = fs.readFileSync('./rsa_1024_priv.pem', "utf8")