博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs加解密
阅读量:6863 次
发布时间:2019-06-26

本文共 2601 字,大约阅读时间需要 8 分钟。

加密分类

可逆加密和不可逆加密

  1. 不可逆加密: 加密后不可解密,只能通过碰撞密文以极小的概率解密;
  2. 可逆加密: 加密后可以解密;包括对称加密非对称加密;
    1. 对称加密双方采用共同密钥;
    2. 非对称加密: 这种加密方式存在两个密钥,密钥-- 一种是公钥,一种是密钥。使用公钥加密,则只能使用密钥解密,使用密钥加密,则只能使用公钥解密;

不可逆加密

const crypto = require('crypto');    let str = 'abcd';    let password = 'hello';    // 不可逆加密    // 支持md5/sha1/sha256等加密    let data1 = crypto.createHash('md5').update(str).digest('hex');    console.log(data1);    // 以指定key作为密码进行加密    let data2 = crypto.createHmac('md5', password).update(str).digest('hex');    console.log(data2);

可逆加密

对称加解密

const crypto = require('crypto');    let str = 'abcd';    const password = 'FnJL7EDzjqWjcaY9';    const iv = 'FnJL7EDzjqWjcaY9';    // 加密    const cipher = crypto.createCipheriv('aes-128-cbc', password, iv);    cipher.update(str,'utf8', 'hex')    let data3 = cipher.final('hex');    console.log(data3);    // 解密    const decipher = crypto.createDecipheriv('aes-128-cbc', password, iv);    decipher.update(data3, 'hex', 'utf8')    let data4 = decipher.final().toString();    console.log(data4);

非对称加解密(基于公钥密钥)

  1. 生成公钥密钥

    openssl genrsa -out server.key openssl req -new -key server.key -out server.csr openssl x509 -req  -in server.csr -signkey server.key -out server.crt
  2. 验证证书功能

    const crypto = require('crypto'); const fs = require('fs'); const sign = crypto.createSign('RSA-SHA256'); const verify = crypto.createVerify('RSA-SHA256'); const privateKey = fs.readFileSync('./server.key').toString();      //rsa私钥 const publicKey = fs.readFileSync('./server.crt').toString(); const str = 'abcd'; sign.update(str); verify.update(str); let signture = sign.sign(privateKey); let result = verify.verify(publicKey, signture); console.log(result);         // true/false
  3. 公钥密钥加解密

    const crypto = require('crypto'); const fs = require('fs'); const privateKey = fs.readFileSync('./server.key').toString();      //rsa私钥 const publicKey = fs.readFileSync('./server.crt').toString(); const str = 'abcd'; // 公钥加密,密钥解密 const publicEncodeData = crypto.publicEncrypt(publicKey, Buffer.from(str)).toString('base64'); console.log("encode: ", publicEncodeData); const privateDecodeData = crypto.privateDecrypt(privateKey, Buffer.from(publicEncodeData.toString('base64'), 'base64')); console.log("decode: ", privateDecodeData.toString()) // 密钥加密,公钥解密 const privateEncodeData = crypto.privateEncrypt(privateKey, Buffer.from(str)).toString('base64'); console.log("encode: ", privateEncodeData); const publicDecodeData = crypto.publicDecrypt(privateKey, Buffer.from(privateEncodeData.toString('base64'), 'base64')); console.log("decode: ", publicDecodeData.toString())

转载于:https://www.cnblogs.com/zhaowinter/p/10825565.html

你可能感兴趣的文章
10-C语言循环结构(一)
查看>>
python学习笔记--基础概要
查看>>
2018/11/28 scp eve-ng
查看>>
使用Django操作数据库入门
查看>>
ny106 背包问题
查看>>
nyoj228 士兵杀敌(5)插线问线
查看>>
ny712 探寻宝藏 ny61 传纸条(1)
查看>>
CSS后代选择器可能的错误认识
查看>>
Python垃圾回收机制
查看>>
Gson将参数放入实体类中进行包装之后再传递
查看>>
设置mysql5.7远程连接-----------https://blog.csdn.net/qiyueqinglian/article/details/52778230
查看>>
IOS7状态栏StatusBar官方标准适配方法
查看>>
嵌入式开发之项目---uboot 内存合集
查看>>
模式识别之ocr项目---(模板匹配&BP神经网络训练)
查看>>
python3 geohash 导入错误及解决
查看>>
zabbix告警使用sendEmail
查看>>
CCF-NOIP-2018 提高组(复赛) 模拟试题(七)
查看>>
Java 基础知识点小结
查看>>
博弈入门
查看>>
iOS中获取当前时间,设定时间,并算出差值
查看>>