2013-02-14 199 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