前一段时间我想玩一下 Google Appengine,我制作了一个 java 网站。现在我需要摆脱它,我想迁移到 Rails,网站本身不是问题,但在我使用的 Java 版本中 BasicPasswordEncryptor加密我的密码。
现在我不知道如何在 Ruby 上获得相同的哈希值。文档说它是 md5 加密,但哈希值看起来像
4+RZ+7Vn/ddlNv4rdJeeg.....
所有哈希值都是 32 个字符长,但它看起来确实不像 MD5 哈希值。我也不明白盐储存在哪里。
有人有任何信息可以帮助解决这个问题吗?
谢谢
最佳答案
BasicPasswordEncryptor 执行以下操作
a) 将密码转换为字节数组 b) 它创建一个随机的 8 字节盐 c) 通过带盐的 md5 传递 1000 次输入 d) 得到 MD5 结果 - 16 字节 e) 它添加到这个结果 salt - 8 个字节 f) 它使用 base64 编码 24 个字节(MD5 和 salt),据我了解,最终将是 32 个字节。
您可以在这里查看源代码: http://grepcode.com/file/repo1.maven.org/maven2/org.jasypt/jasypt/1.5/org/jasypt/util/password/BasicPasswordEncryptor.java http://grepcode.com/file/repo1.maven.org/maven2/org.jasypt/jasypt/1.5/org/jasypt/digest/StandardByteDigester.java#StandardByteDigester.digest%28byte%5B%5D%29
因此,您需要在 Rails 中完成相同的操作(生成新的摘要密码或检查旧的摘要密码)。
无法从摘要中恢复原始密码(这就是摘要的全部意义)。
关于Java网站到Rails,复制密码加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495649/