我知道有很多关于散列和加密算法的文章。
我从这些文章中了解到,应该使用散列函数而不是加密函数 来存储密码在数据库中。
因此,我决定使用SHA-256算法生成散列密钥,并将该散列密钥存储到我的服务器数据库中,而不是明文密码。
现在我真的不知道如何使用它,因为每次我传递相同的密码以生成SHA密钥时,它都会给出与先前不同的密钥,那么如何将其与存储在我的数据库中的散列密钥进行比较呢?
我正在使用Java,所以我的Java代码如下:
public class Test {
public static void main(String...arg) throws IOException{
System.out.println("First time");
String string64 = getEncryptedPassword("FenilShah");
System.out.println(string64);
System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(string64)));
System.out.println("\nSecond time");
string64 = getEncryptedPassword("FenilShah");
System.out.println(string64);
System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(string64)));
System.out.println("\nThird time");
string64 = getEncryptedPassword("FenilShah");
System.out.println(string64);
System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(string64)));
}
public static String getEncryptedPassword(String clearTextPassword) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(clearTextPassword.getBytes());
byte pass[] = md.digest();
System.out.println(pass.toString());
return Base64.encodeBase64String(StringUtils.getBytesUtf8(pass.toString()));
} catch (NoSuchAlgorithmException e) {
//_log.error("Failed to encrypt password.", e);
}
return "";
}
}
因此,输出的结果类似于这样:
First time
[B@5bf825cc
W0JANWJmODI1Y2M=
[B@5bf825cc
Second time
[B@1abfb235
W0JAMWFiZmIyMzU=
[B@1abfb235
Third time
[B@1f4cc34b
W0JAMWY0Y2MzNGI=
[B@1f4cc34b