2013-02-14 194 views
3

我正在使用bcrypt nodejs模塊。使用node.js加密/解密密碼

我很滿意它來加密和比較密碼,但它似乎不可能解密它。

我很納悶:

  1. 你如何加密/解密的密碼用的NodeJS(模塊或方法是否使用的是)?
  2. 解密用bcrypt模塊編碼的密碼是否有竅門?

謝謝!

回答

9

你不用bcrypt解密密碼 - 這是一種單向算法。你所做的是存儲原始(鹽漬)密碼的散列。然後你對(醃製)猜測進行散列。如果哈希匹配,那麼猜測是正確的。

例如,你可以這樣做:

// "password" 
var stored_hash = '$2a$10$vxliJ./aXotlnxS9HaJoXeeASt48.ddU7sHNOpXC/cLhgzJGdASCe' 
bcrypt.compare(guess, stored_hash, function(err, res) { 

}); 

請注意,我不鹹這一點,所以你需要做的。 node-bcrypt鹽的哈希默認情況下。

+0

是的,這是我做的,但如果你想使用外部API(例如facebook)來授權用戶,並將同一用戶的憑證返回給客戶端,那可能是有用的。 – Ludo 2013-02-14 10:01:50

+0

@盧多你需要知道他們的密碼,或者你只需​​要知道他們的名字以及他們是否可以成功登錄?這就是Facebook連接提供的軸索登錄API,身份驗證在facebook.com上進行,而不是在您的域上進行,Facebook將用戶重定向到您使用哈希指定的適當路徑,然後您知道該用戶已通過身份驗證。 – Mustafa 2013-02-14 14:23:49

+0

@Mustafa我需要一個密碼,我在facebook註冊期間在服務器端自動生成一個密碼,以便在用戶的管理頁面上顯示它。 – Ludo 2013-02-14 16:40:34

1

更好的方法是使用這個節點模塊https://github.com/davidwood/node-password-hash,它可以加密你的密碼,並允許加密版本與實際密碼。

+0

事情是我沒有「實際的一個「,但我會以不同的方式做,因爲每個加密系統都以這種方式工作。 – Ludo 2013-02-14 13:54:31