gpt4 book ai didi

java - JSP简单密码加密解密

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:25 25 4
gpt4 key购买 nike

我需要加密密码以插入数据库。此外,当我需要该密码时,我需要解密该值。执行此操作的简单方法是什么?

注意:这个操作必须不是很安全。

最佳答案

请不要实现您当前的计划,相反您应该使用 MessageDigest 来完成它。将单向加密哈希函数应用于用户密码(例如 SHA-256、SHA-384 和 SHA-512 [以及其他] 之一)和 SALT 以防止基于 rainbow table 的攻击。最后,对于密码重置,只需替换当前密码哈希即可。

举个例子,

// We need a bytesToHex method first. So, from -
// http://stackoverflow.com/a/9855338/2970947
final protected static char[] hexArray = "0123456789ABCDEF"
.toCharArray();

public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
int v;
for (int j = 0; j < bytes.length; j++) {
v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}

// Change this to something else.
private static String SALT = "123456";

// A password hashing method.
public static String hashPassword(String in) {
try {
MessageDigest md = MessageDigest
.getInstance("SHA-256");
md.update(SALT.getBytes()); // <-- Prepend SALT.
md.update(in.getBytes());
// md.update(SALT.getBytes()); // <-- Or, append SALT.

byte[] out = md.digest();
return bytesToHex(out); // <-- Return the Hex Hash.
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}

public static void main(String[] args) {
System.out.println(hashPassword("Hello"));
System.out.println(hashPassword("Hello"));
System.out.println(hashPassword("Hello1"));
System.out.println(hashPassword("Hello2"));
}

哪个应该输出

60C1E22D18D022F01EEF0CAF999E52FD44C0C8EFD2161E9F4D24120AB0AFC84D
60C1E22D18D022F01EEF0CAF999E52FD44C0C8EFD2161E9F4D24120AB0AFC84D
CAAC2288692DD57BADFAE0225A42E59E1979E0116D009EEF01912E8C75529515
E0A3963BFAF209A17422918CB1FC950A62858993CA9A7BA6F760B8D4688306FD

展示一个字符产生的散列值有多么不同。

关于java - JSP简单密码加密解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20832008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com