在我的代码中,我想存储密码......但由于它是一个在线程序,我想保密密码(duh)。所以我使用了"Password Here".hashCode()
。完善。我有一个疯狂的新代码。现在我如何查看密码(在密码字段(JTextField)中)是否与密码匹配。我不想要HASHCODE-ED密码!我想要真正的密码! (与hashCode()相反)
if (PasswordField.getText().equals("HASH NUMBER HERE!")) {
login(username, password, address, port);
但是在这里我输入已经是hashCode()的编号...我希望它能够在我将其更改为hashCode()之前获取密码
我想将hashCode() - ed密码读入非hashCoded() - ed字符串。我该怎么做?
谢谢!
答案 0 :(得分:3)
您无法“撤消”(或“解密”)哈希码。哈希码不是加密形式。
首先,您不应将hashCode()
用于密码。您应该使用cryptographic hash function代替。
加密哈希函数的重点在于它是一种单向算法 - 给定一些输入,你可以计算哈希值,但是(实际上)无法计算原始输入。你只有哈希。
这通常如何运作,如下:
如您所见,当您这样做时,没有必要“解密”哈希。
在实践中,有很多细节可以让它真正安全。您应该使用强大的加密哈希函数和salt来使其更安全。在将要在网上提供的任何严肃应用中使用之前,请务必仔细研究。
答案 1 :(得分:2)
hashCode没有反面。要检查输入的密码是否等于散列(存储)版本,只需对输入的密码进行散列并根据已知(存储的)散列进行检查。例如,使用hashCode方法,比较密码的int值:
int storedHash = getStoredHash();
String password = passwordField.getText();
if ( storedHash != password.hashCode() ){
//wrong
}
并注意:您可能会考虑使用比hashCode(MD5,SHA等)更安全的东西。