Gem 请问 devise 的密码默认的加密算法是什么?

bony · 2011年12月21日 · 最后由 night_song 回复于 2012年02月04日 · 8438 次阅读

因为需要在别的系统里使用到 devise 生成的 user 表。。当初没有去换那个 devise 的 config.encryptor,使用的默认值。所以,有知道的朋友告诉我一下,thank you so much.. 现在用的用户已经很多了,没法再去修改算法。

@Psi 还想请教一个问题,我想在注册的时候做一些操作,于是在 user 的 after_create 加了一些操作。但是加了以后注册貌似就失效了。表单提交以后就刷新一下页面。请问一下,devise 如果想在注册后写一些操作应该怎么做?

#2 楼 @bony 不清楚你说的情况,无法回答

还有一个很纠结的问题就是从外部貌似没有办法来验证 devise 产生的密码。。好像是有个动态的 key。因为每次生成的加密字符串都不一样。。唉,这可如何是好。。

@Psi 那个问题解决了。。现在有没有什么办法从外部去验证 devise 产生的帐号和密码?那个验证密码的方法好像是动态的,要传入一个 key 好像。

#5 楼 @bony 查看你数据库里保存的 salt

devise 用的是 bcrypt 这个 gem,算法好像是 blowfish,lz 可以去确认下。

下面解决你说的验证用户密码问题: 你应该去看一下数据库中的 hash 字段,我记得格式好像都是 xxxx#yyyy。 xxxx 是加密中的 salt,好像是 4 位或 6 位的数字,也就是你说的那个动态的 key。。。 yyyy 是实际的 hash 值。 所以用户提供的密码要加上 xxxx 这个 salt 再 hash 一下看是否和 yyyy 一样。 这里说的很明白了,剩下的 bcrypt 文档都有说明。

@Psi,@clc3123 感谢感谢。

首页就写了:Encryptable: adds support of other authentication mechanisms besides the built-in Bcrypt (the default).

bcrypt 的好处是:

  • 可以自定义复杂度, 用 sha512 之类的可能过几年就不安全了.
  • 每次加密结果都不同所以不用加盐.
  • 只能验证不能解密, 数据库被盗也不会丢密码.
需要 登录 后方可回复, 如果你还没有账号请 注册新账号