Enc*_*rrr 11 java hash sha password-protection
我正在尝试使用SHA2散列一些密码.
我在哪里可以获得一段Java代码?
我看过那篇文章,但我遗漏了一些东西: 用Java编写SHA2密码
Mac mac = Mac.getInstance("HmacSha256");
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), "HmacSha256");
mac.init(secret);
byte[] shaDigest = mac.doFinal(phrase.getBytes());
String hash = "";
for(byte b:shaDigest) {
hash += String.format("%02x",b);
}
Run Code Online (Sandbox Code Playgroud)
这句话是我想编码的字符串吗?什么是关键(第2行)
提前致谢
ros*_*sum 25
首先,你需要明确你想做什么.您说要散列密码,但您使用的代码是MAC(消息验证码),特别是HMAC.
哈希和MAC对于不同的目的是不同的东西(虽然HMAC确实涉及使用哈希).您需要确保使用正确的产品满足您的要求.
您被要求提供密钥的原因是因为MAC需要密钥.哈希没有:
public byte[] hash(String password) throws NoSuchAlgorithmException {
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] passBytes = password.getBytes();
byte[] passHash = sha256.digest(passBytes);
return passHash;
}
Run Code Online (Sandbox Code Playgroud)
tho*_*n86 14
我修改了一个小rossum的代码,添加了salt并将返回类型转换为String,添加了try/catch,也许它会对某人有所帮助:
public String hash(String password) {
try {
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
String salt = "some_random_salt";
String passWithSalt = password + salt;
byte[] passBytes = passWithSalt.getBytes();
byte[] passHash = sha256.digest(passBytes);
StringBuilder sb = new StringBuilder();
for(int i=0; i< passHash.length ;i++) {
sb.append(Integer.toString((passHash[i] & 0xff) + 0x100, 16).substring(1));
}
String generatedPassword = sb.toString();
return generatedPassword;
} catch (NoSuchAlgorithmException e) { e.printStackTrace(); }
return null;
}
Run Code Online (Sandbox Code Playgroud)
Dap*_*eng 10
您可以考虑使用commons-codec的实现
String hash = org.apache.commons.codec.digest.DigestUtils.sha256Hex(password +"salt");
Run Code Online (Sandbox Code Playgroud)
小智 1
短语是您要保护的密码。 key是盐,是在散列之前附加到密码的唯一(且已知)字符串,以击败彩虹表。或者至少应该是。您的代码只是从密码本身获取它,这是毫无意义的。它应该是一个长随机字符串,与密码摘要一起存储。
| 归档时间: |
|
| 查看次数: |
36824 次 |
| 最近记录: |