詳解Node.js API系列 Crypto加密模塊(1)

MD5加密算法

算法簡介

MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l. rivest開發出來,經md2、md3和md4發展而來。它的作用是讓大容量信息在用數字簽名軟件簽署私人密匙前被“壓縮”成一種保密的格式(就是把一個任意長度的字節串變換成一定長的大整數).不管是md2、md4還是md5,它們都需要獲得一個隨機長度的信息併產生一個128位的信息摘要.

MD5 算法的哈希值大小爲 128 位。是一種不可逆的算法。

算法特點

  • 兩個不同的明文不會得到相同的輸出值
  • MD5結果不能反推明文,不可逆

安全性

從安全的角度講,MD5的輸出爲128位,若採用純強力攻擊尋找一個消息具有給定Hash值的計算困難性爲2128,用每秒可試驗1000000000個消息的計算機需時1.07×1022年。若採用生日攻擊法,尋找有相同Hash值的兩個消息需要試驗264個消息,用每秒可試驗1000000000個消息的計算機需時585年。

實際應用上,例如我知道‘password’的MD5值是5f4dcc3b5aa765d61d8327deb882cf99,那麼我就用一個數據庫存起來,只要我看到5f4dcc3b5aa765d61d8327deb882cf99,我就知道這個是口令‘password‘使用MD5處理之後的值,原來的口令就是’password'。MD5在身份鑑別系統中用於口令保護已經是很久了事情了,大部分黑客也有針對這種Hash方式準備相應的數據庫進行反查,這種數據庫稱爲彩虹表,MD5的安全性大大減弱。

MD5加密例程

var crypto = require('crypto');
var content = 'password'
var md5 = crypto.createHash('md5');
md5.update(content);
var d = md5.digest('hex');  //MD5值是5f4dcc3b5aa765d61d8327deb882cf99

SHA1算法

算法簡介

SHA1的全稱是Secure Hash Algorithm(安全哈希算法)。加密哈希函數將任意長度的二進制字符串映射爲固定長度的小型二進制字符串。加密哈希函數有這樣一個屬性:在計算上不大可能找到散列爲相同的值的兩個不同的輸入;也就是說,兩組數據的哈希值僅在對應的數據也匹配時纔會匹配。數據的少量更改會在哈希值中產生不可預知的大量更改。所以你很難從加密後的文字中找到蛛絲馬跡。

SHA1 算法的哈希值大小爲 160 位。是一種不可逆的算法。

SHA1加密例程

var crypto = require('crypto');
var content = 'password'
var shasum = crypto.createHash('sha1');
shasum.update(content);
var d = shasum.digest('hex');

MD5與sha1的不同點

  • MD5 使用小端排序LITTLE-ENDIAN,sha1 使用大端排序BIG-ENDIAN
  • MD5最後生成的摘要信息是16個字節,SHA1是20個字節。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章