nodejs加密模块使用

nodejs的加密模块crypto是使用了系统自带的openssl的加密模块来实现的,里面实现了多种加密算法,如md5、sh1、aes等等,即常用的hash算法,Hmac算法,加解密算法等

hash算法的使用,用md5加密来举例,其他的类似
const crypto = require('crypto');

/** 
* md5加密 
* @param str 需要加密的字符串 
* @returns {*} 
*/
function encryptMd5(str) {    
      const md5 = crypto.createHash('md5'); 
      return md5.update(str).digest('hex').toLowerCase();
}

const test1 = encryptMd5(‘1231asdda’);
console.log(test1);

只用crypto.createHash('md5')创建一个md5加密的hash,因为创建的md5加密只能对每个加密字符串使用一次,所以需要每次加密的时候都创建一个新的md5加密块

update告诉md5加密需要对哪个字符串进行加密,可以多次调用,多次调用的结果类似于使用md5.update(str1+str2);也就是说

md5.update(str1);
md5.update(str2);
和
md5.update(str1+str2);

加密出来的效果是一样的

调用digest()对update传入的字符串或者二进制数据进行加密,可以传入加密后显示的格式作为参数,可接受的参数:hex(16进制)、base64(base64格式)等,一般选用的是hex格式,一旦调用了digest之后,这个md5加密串就完成使命了,再次调用md5.update或者digest都会提示错误,这个时候要想对其他数据进行加密的话,需要创建一个新的加密字串算法

AES等加解密算法

这类算法允许我们对一个字符串或者二进制数据进行加密,然后在解密出来使用,以AES算法来举例

// 加密
function encrypt(str, key) {    
  const cipherChunks = [];   
  const ciper = crypto.createCipheriv('aes-128-ecb', key, '');  
  cipherChunks.push(ciper.update(str, 'utf-8', 'hex'));    
  cipherChunks.push(ciper.final('hex'));   
  return cipherChunks.join('');
}

// 解密
function decipher(str, key){
    const cipherChunks = [];
    const decipher = crypto.createDecipheriv('aes-128-ecb', key, '');
    cipherChunks.push(decipher.update(str, 'hex', 'utf-8'));
    cipherChunks.push(decipher.final('hex'));
    return cipherChunks.join('');
}

类似于hash算法的使用,nodejs提供了两种创建AES算法的方式,一种需要使用加密向量createDecipheriv,一种是不需要使用加密向量的createDecipher,一般我们要使自己的加密出来的结果和java等其他语言加密的结果相等的话,就需要使用第一种方式,传递一个空字符串作为向量,注意这里的key的长度需要为16位字符长度,也就是128的字节长度,因为我们使用的是aes-128-ecb的加解密算法,也就是key需要为128字节长度即16个字符串的长度

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 之前一直对加密相关的算法知之甚少,只知道类似DES、RSA等加密算法能对数据传输进行加密,且各种加密算法各有...
    Henryzhu阅读 3,050评论 0 14
  • 本文主要介绍移动端的加解密算法的分类、其优缺点特性及应用,帮助读者由浅入深地了解和选择加解密算法。文中会包含算法的...
    苹果粉阅读 11,580评论 5 29
  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,683评论 0 6
  • 之前的项目中接触过一些加密的方法,也没有太仔细的进行记录和研究。最近在写SDK时,加密模块的占比相当之大;借此时机...
    大雄記阅读 11,017评论 20 63
  • 随着国家经济的快速发展,有车的人越来越多,“喝酒不开车,开车不喝酒”已深入人心,相对应的汽车服务也应运而生,从20...
    后河车贷阅读 732评论 0 0