当前位置:   article > 正文

nodejs_加解密:_nodejs md5解密

nodejs md5解密

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'));	//十六进制的字符串表示

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

把一个字符串整体加密(一次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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

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

hash.update('sha1thisisisisfdfdsfdsfdsfdsfdsfdsfds32432432432fdsfr231432ds');
console.log(hash.digest('hex').length);
  • 1
  • 2
  • 3
  • 4
  • 5

二、加解密算法:

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

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

对称加解密要稍微封装:

加密函数: 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'));

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

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));

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号