美文网首页
第九节: 内置模块(五): crypto加密模块

第九节: 内置模块(五): crypto加密模块

作者: 时光如剑 | 来源:发表于2020-12-21 19:29 被阅读0次

    1.crypto加密模块

    crypto模块的目的是为了提供通用的加密的哈希算法。Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。

    1.1. hash 哈希算法

    MD5是一种常用的哈希算法,用于给任意数据一个“签名”。这个签名通常用一个十六进制的字符串表示:

    哈希是一个系列的加密算法, 各个不同的哈希算法

    1.1.1 md5 加密

    md5加密是哈希算法里的一种加密方式;

    用法示例:

    const crypto = require('crypto');
    
    //查看Hash加密方式
    console.log(crypto.getHashes());
    
    
    
    // md5 加密方式的使用
    // 1.  通过指定加密类型创建加密对象
    const hash_md5 = crypto.createHash("md5")
    
    
    // 2. 加密的字符串
    // 根据 data 来更新哈希内容,还可以接受第二个参数,第二个参数是编码方式,默认为utf8
    const data = "需要加密的字符";
    hash_md5.update(data);
    
    // 3. 输出加密后的字符
    // 参数是指定返回什么类型的加密字符, 默认是Buffer数据类
    // 常用的是hex  16进制字符   base64 字符
    // 加密后的字符只能输出一次,第二次输出就会报错.
    
    const password = hash_md5.digest("hex");
    
    console.log(password);
    

    特点:

    1. 不可逆,只能从原文生成密文,不能从密文还原
    2. 等长度,不管多少内容, 一律加密后生成32位字符
    3. 会损失信息
    1.1.2 sha256 加密

    sha256 加密返回16进制密文是的是64位,

    const crypto = require("crypto");
    
    
    // 创建加密对象
    const hash_sha256 = crypto.createHash("sha256")
    
    // 加密字符串
    const data = "需要加密的字符";
    hash_sha256.update(data)
    
    // 获取加密后的密文
    const password =  hash_sha256.digest("hex")
    console.log(password)
    
    1.1.3 加盐(salt)

    盐值就是随机数值,用于在计算密码的哈希值时加强数据的安全性,可以有效抵御诸如字典攻击、彩虹表攻击等密码攻击媒介。

    const crypto = require('crypto');
    
    const hash_md5 = crypto.createHash("md5")
    
    // 定义盐值
    const key = "wuwei"
    
    const data = "哈哈";
    hash_md5.update(data + key);
    
    
    const password = hash_md5.digest("hex");
    
    console.log(password);
    
    1.2. Hmax 算法

    Hmac算法也是一种哈希算法,它可以利用MD5或SHA1等哈希算法。不同的是,Hmac还需要一个密钥:

    const crypto = require('crypto');
    
    // 秘钥
    const key = 'BDvDYUmfdykkBLgX';
    
    // 创建加密对象
    const hmac = crypto.createHmac('sha256', key);
    
    // 加密
    hmac.update('你好啊,朋友');
    
    
    const password = hmac.digest('hex');
    
    console.log(password); 
    

    只要密钥发生了变化,那么同样的输入数据也会得到不同的签名,因此,可以把Hmac理解为用随机数“增强”的哈希算法。

    相关文章

      网友评论

          本文标题:第九节: 内置模块(五): crypto加密模块

          本文链接:https://www.haomeiwen.com/subject/rgumgktx.html