Node.js中的MD5加密

音乐

先来一首陈势安的 《 天后 》来缓解一下疲惫的心情吧



MD5简介


1.定义

MD5即Message-Digest Algorithm 5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用

的一种散列函数,用以提供消息的完整性保护。


2.作用

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一

个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有

sha-1RIPEMD以及Haval等。


3.MD5算法特点

MD5算法具有以下特点:

(1) 压缩性:任意长度的数据,算出的MD5值长度都是固定的。

(2) 容易计算:从原数据计算出MD5值很容易。

(3) 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

(4) 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困

  难的。


Node.js使用MD5

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

        const crypto = require('crypto'); //引入crypto加密模块

        const hash = crypto.createHash('md5'); //规定使用哈希算法中的MD5算法

        // 可任意多次调用update(),效果相当于多个字符串相加
        hash.update('123a');
        hash.update('456');

        //最终加密的字符串为'123a456',hash.digest('hex')表示输出的格式为16进制
        console.log(hash.digest('hex')); // 57d15a6ee827933b25dab42111b6803b

        update()方法默认字符串编码为UTF-8,也可以传入Buffer。

        注:

        如果要计算SHA1,只需要把'md5'改成'sha1',就可以得到SHA1的结果

        3be8b1b4c1b081f65522c4dd69b1d5c5713b038b。当然还可以使用更安全的sha256和sha512。

同样,可以将MD5算法封装成一个函数 , 方便重复调用

        const crypto = require('crypto');

        function md5 (text) {
            return crypto.createHash('md5').update(text).digest('hex');
        };

目前单次的MD5加密并不安全,很容易被暴力破解,因此推荐多次加密和使用秘钥加密

    1.多次MD5加密

        例如要加密 '123' 这个字符串

           const crypto = require('crypto');

        function md5 (text) {
            return crypto.createHash('md5').update(text).digest('hex');
        };

        多次加密:

        var str='123';

        var pass=md5(str);

        var FinalPass=md5(pass);
多次MD5加密不容易被破解,但是嵌套起来也比较麻烦, 因此我再介绍另外一种方法
    2.MD5结合秘钥加密

        例如要加密 '123' 这个字符串

           const crypto = require('crypto');

        function md5 (text) {
            return crypto.createHash('md5').update(text).digest('hex');
        };

        结合秘钥加密:

        var str='123';

        var md5_suffix='asd1wdad1d哈do捱三顶五#&8qw'; //md5_suffix作为秘钥,越复杂越好

        var FinalPass=md5(str+md5_suffix);
结合秘钥使用MD5加密更难被破解,但是也有一定的缺陷,就是如果秘钥一旦丢失就无法进行验证

MD5加密语句的详细讲解

    (1) crypto.createHash(algorithm)

        创建并返回一个hash对象,它是一个指定算法的加密hash,用于生成hash摘要。

        参数algorithm可选择系统上安装的OpenSSL版本所支持的算法。例如:'sha1', 'md5', 'sha256', 

        'sha512'等。在近期发行的版本中,openssl list-message-digest-algorithms会显示这些可用的摘要算法

    (2) hash.update(data)

        更新hash的内容为指定的data。当使用流数据时可能会多次调用该方法。

    (3) hash.digest(encoding='binary')

        计算所有传入数据的hash摘要。参数encoding(编码方式)可以为'hex', 'binary' 或者'base64'

Reprint please specify: 流月如风 Node.js中的MD5加密

目录