字符串对于我的项目,我得到了我的密码字段值的的hashCode并存储在数据库中的哈希码安全目的。现在我想恢复从hashCode.How我可以做密码它? 是否有可能从hashCode返回字符串值。如果现在任何人都可以建议我更好的方式来存储我的密码在任何其他格式。我怎么能得到的hashCode
回答
不是一个好主意,应该的hashCode永远不会被用作识别对象的证明平等......
考虑这个问题:
System.out.println("Aa".hashCode());
System.out.println("BB".hashCode());
都具有相同的hashCode 2112,但持有完全不同信息
使用哈希码作为存储的密码完全依赖于这种技术。更重要的标准是密码不应该可恢复,并且哈希代码不应该是可逆的。 – EJP
所以如果你的密码是Aa,你还会得到BB吗? –
当然,这就是哈希码的工作原理:它们是一个从大值空间到小值空间的映射,因此不可逆,正如我刚才所说,这是真正的一点。密码的不可逆性是解决[公司破坏问题](https://stackoverflow.com/questions/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext -retrie/2287672#2287672)。你的例子不太现实,但是根据定义,这个星球上的每个安全系统都使用密码散列而不是密码加密。 – EJP
散列是一个单向函数(它应该至少),所以你不能从哈希中恢复密码。
但是,您可以将相同的散列应用于任何字符串,并将其与密码的散列进行比较,以便检查它们是否匹配。
具有良好的哈希,使用相同哈希的两个字符串的机会相当低,因此您可以比较密码(您可以存储的)的哈希和另一个字符串的哈希以确定它们是否相同。
另一点是hashCode
不是产生这种散列的好方法,因为我们可以很容易地使用两个具有相同散列码的对象。您可以使用实现,如PBKDF2
,BCrypt
等
你知道几个对象可以有相同的散列(),因为它在Java文档中提到了Object.hashCode()
这是不要求,如果两个对象不相等 *根据{@link java.lang.Object#equals(java.lang.Object)} *方法,然后调用每个 *上的{hashCode}方法*两个对象必须产生不同的整数结果。
很明显,你不能从同一个哈希码中恢复不同的对象,所以根本不可能,简单的逻辑。
一种技术是强制它。只需运行所有可能的密码。如果散列算法的设计不是计算成本昂贵的,你可以通过一个令人惊讶的数字。
如果确实是String.hashCode
那么这不是密码安全的。不是由一个长镜头。正如ΦXocę웃Pepeúpaツ的答案一样,您可能手工倒退到一个(许多)可能的密码。
你应该怎么做?使用众所周知的加密哈希。优选地,可以使计算成本高昂的一个例如bcrypt。此外,您应该使用密码(在散列之前将密码与密码结合使用以防止使用紧凑的预先计算的查找表(彩虹表)来破解散列)。基本上使用别人的图书馆/系统。
- 1. 我怎么能得到昨天的NSDate
- 2. 我怎么得到的ObservableCollection
- 3. 我怎样才能得到
- 4. xslt我怎么能得到我在xml中的位置?
- 5. 我怎么能看到“developers.facebook.com”
- 6. 我怎么能从NSURLSessionDownloadTask获得路径
- 7. 什么是.framework文件,我怎么才能得到它?
- 8. 在django 1.2.1我怎么能得到像旧的.as_sql的东西?
- 9. 我怎么能得到的XElement的第一个元素
- 10. 我怎么能得到正在调用我的功能的节点?
- 11. 我怎么能得到这样的标签布局
- 12. 我怎么能得到在tableview中选定的项目pyqt4
- 13. 我怎么不能得到这个PJAX例子的工作?
- 14. 我怎么能得到JSF的前缀为JSF HTML元素2.0
- 15. 我怎么能从i18n表中得到一个结果? (CakePHP的)
- 16. 我怎么能得到超过一年的推文
- 17. ,我怎么能得到图片的alt在外部DIV#标题
- 18. 我怎么能得到一个普通类div的内容
- 19. 我怎么能得到的只有最后修改日期
- 20. 我怎么能得到高速缓存图像的数据SDWebImage
- 21. 我怎么能得到用户控件的父母wpf
- 22. 我怎么能得到数组的价值
- 23. 我怎样才能得到Parsley.js
- 24. 我怎样才能得到父组件
- 25. 我怎样才能得到屏幕-Android
- 26. 我怎样才能得到djangocms
- 27. 我怎样才能得到一个TD
- 28. 我怎样才能得到android
- 29. 我怎样才能得到statechange
- 30. 我怎样才能得到NSScrollView尊重
如果你可以从哈希中恢复你的密码,哈希将如何提高你的安全性? – khelwood
你不能。根据定义,哈希码不可逆。请参阅[标签:密码加密](您自己的标签)下的讨论。 – EJP
[哈希在Java中 - >从哈希和盐](https://stackoverflow.com/q/38832367/608639)获取密码,[我如何检索哈希密码的原始明文密码](https:// stackoverflow (https://stackoverflow.com/q/12026149/608639),[使用Java加密和解密密码]。[/ q/23761505/608639] (https://stackoverflow.com/q/6592010/608639),[密码存储为散列值时检索密码](https://stackoverflow.com/q/1013581/608639)等 – jww