nodejs_加解密:

nodejs加解密:

一、哈希算法:是不可逆的,只是单向的,如果指明使用hex 十六进制的字符串表示,它的加密结果都是32位

正常数据用户名密码大多数是md5加密的 使用场景:数据库密码字段设计,支付中做数据的摘要

//用常量去接收 require 的返回值
const crypto = require('crypto');	//引入模块
//创建md5算法
crypto.createHash('md5');
//数据的单向加密
let str1 = 'thisisnode';
//具体的加密
hash.update(str1);	//update可执行多次
let encodeStr=hash.digest('hex');
console.log(hsh.digest('hex'));	//十六进制的字符串表示

把一个字符串整体加密(一次update),和分段加密(分段可以任意分割,多次update) 结果是一致的.

//比方一个字符串 123456789,可分割为 123+456+789
 let totalStr = '123456789';
 let str1 = '12';
 let str2 = '3456';
 let str3 = '789';
 hash.update(totalStr);//update 就是md5单项加密的主逻辑  123456789 整个字符串密码结果为:25f9e794323b453885f5181f1b624d0b
 console.log(hash.digest('hex'));
 hash.update(str1);
 hash.update(str2);
 hash.update(str3);
 console.log(hash.digest('hex'));    //加密结果:123456789的分段加密结果为:25f9e794323b453885f5181f1b624d0b

哈希算法2.sha1,与md5大体类似,如制定16进制显示的话,返回40位长度的字符串

//创建个sha1算法
let hash=crypto.createHash('sha1');

hash.update('sha1thisisisisfdfdsfdsfdsfdsfdsfdsfds32432432432fdsfr231432ds');
console.log(hash.digest('hex').length);

二、加解密算法:

一.对称加密:就是加密与解密的 秘钥一致,简单的说就是 加密时用到的 密码,与解密时用到的 密码一致

非对称加密:就是加密与解密的 秘钥不一致,简单的说就是 加密时用到的 密码,与解密时用到的 密码不一致

对称加解密要稍微封装:

加密函数: data 指被加密的数据,key 就是密码`

function aesEncrypt(data,key){
    /**
     * 1.通过 crypto ,与key 创建一个ciper暗号
     * createCipheriv(algorithm,key)
     * algorithm 加密类型
     * key       密码
     */
    let ciper=crypto.createCipher('aes192',key);
    //把数据加密
    //update 有多种方法
    //推荐   update(data, inputEncoding, outputEncoding)
    /**
     *       data 要加密的数据
     *       inputEncoding 输入的编码,其实就是data的编码
     *       outputEncoding 输出的编码,正常我们都使用hex 16进制的输出
     */
    let returnStr=ciper.update(data,'utf8','hex');
    //加入结尾符
    let final=ciper.final('hex');
    returnStr=returnStr+final;
    return returnStr;
}

console.log(aesEncrypt('hellword','node'));

aes 解密:

function aesDecrypt(encrypted,key){
    /**创建一个解密 */
    const deciper=crypto.createDecipher('aes192',key);
    /**
     *  update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string;
     *  data 就是被加密的字符串,inputEncoding 这个加密的字符的字符串一般椒16进制字符串,outputEncoding 输出的字符串类型一般utf8
     */
    let descrped = deciper.update(encrypted,'hex','utf8');
    descrped+=deciper.final('utf8')
    return descrped;
}
let encrypted='ffd218a2ad04c95688534f4bd30a1c5d';
let key='node'
console.log(aesDecrypt(encrypted,key));

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它使用公钥和私钥来加密和解密数据。在Node.js中,我们可以使用`crypto`模块来实现RSA加密和解密。 首先,我们需要生成RSA密钥对。可以使用以下代码生成一个新的RSA密钥对: ```javascript const crypto = require('crypto'); const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'pkcs1', format: 'pem' }, privateKeyEncoding: { type: 'pkcs1', format: 'pem' } }); console.log('公钥:'); console.log(publicKey); console.log('私钥:'); console.log(privateKey); ``` 生成的公钥和私钥将以PEM格式显示。 接下来,我们可以使用生成的公钥进行加密,私钥进行解密。以下是一个示例: ```javascript const crypto = require('crypto'); // 加密 function encrypt(data, publicKey) { const buffer = Buffer.from(data, 'utf8'); const encrypted = crypto.publicEncrypt(publicKey, buffer); return encrypted.toString('base64'); } // 解密 function decrypt(encryptedData, privateKey) { const buffer = Buffer.from(encryptedData, 'base64'); const decrypted = crypto.privateDecrypt(privateKey, buffer); return decrypted.toString('utf8'); } // 使用示例 const plaintext = 'Hello, RSA!'; const encrypted = encrypt(plaintext, publicKey); console.log('加密后的数据:', encrypted); const decrypted = decrypt(encrypted, privateKey); console.log('解密后的数据:', decrypted); ``` 请注意,这只是一个基本示例,实际使用时可能需要处理更复杂的数据和错误处理。 希望这可以帮助到你!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值