我正在尝试编写一个密码加密类,可用于加密和存储用户密码。我想确保我做的正确。这段代码工作正常,似乎生成了一个加密密码,但我想在这里发布它以获得一些反馈。对我来说,这相当复杂,而且我知道加密货币中的任何东西都很容易犯错误,而没有意识到你正在犯错误。
这是我的代码:
public CipherHandler {
public String encryptPassword(char[] plaintext, String encoding) throws Exception {
MessageDigest msgDigest = null;
String hashValue = null;
/* Convert char array plaintext to byte array */
byte[] b = new byte[plaintext.length << 1];
for (int i = 0; i < plaintext.length; i++) {
b[i] = (byte) plaintext[i]; //will this work regardless of encoding?
}
try {
msgDigest = MessageDigest.getInstance("SHA-256");
msgDigest.update(b);
byte rawByte[] = msgDigest.digest();
hashValue = (new BASE64Encoder()).encode(rawByte);
} catch (NoSuchAlgorithmException e) {
System.out.println("No Such Algorithm Exists");
}
System.out.println(hashValue);
return hashValue;
}
}
这个函数通常会从 Swing 事件处理程序中调用,用户将在其中将密码输入到 JPassword 字段中,这就是我从 char[] 开始的原因。为了测试,我使用这段代码来调用函数:
CipherHandler cp = new CipherHandler();
String initPW;
try {
initPW = cp.encryptPassword("welcome".toCharArray(), "UTF-8");
}
由于这是我第一次尝试,我想我忽略了一些东西。我对任何建议或意见感兴趣。不过,我确实有几个具体问题:
当我将 char[] 转换为 byte[] 时,我不相信我这样做是正确的。我怎么知道要使用哪种编码?在这里,我输入了“UTF-8”,主要是作为占位符,但我担心这在某些情况下可能会失败。
我已经读过我应该在密码被消化后使用盐和迭代,但我不知道如何做到这一点。有人可以给我建议吗?
我正在使用 SHA-256。这是建议的算法吗?我也读过MD5。有没有一种算法更适合密码加密?
谢谢你的帮助。我很感激!