Android sha512 示例
有人可以提供一个关于如何使用 sha512 + salt 的
PW_HASH_ITERATION_COUNT
迭代来哈希密码的 java/android 示例吗?伪代码:
hash = sha512(concat(pw,salt)); for (i = 1; i
其中
z = concat(x,y)
是 x 和 y 的串联。也许使用MessageDigest?
-
您建议
PW_HASH_ITERATION_COUNT
是什么?最多需要多少次迭代才能在某些较旧的设备(2.1+)上运行
UPDATE UPDATE UPDATE
由于充分的理由,我们将使用 bcrypt 来加密我们的密码。我们使用 jBCrypt 实现。
无论如何..回答这个问题...这是上面问题的代码,将 SHA-512 与 MessageDigest 结合使用:
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import de.seduceme.utils.Base64;
public class PwStorage {
public static int PW_HASH_ITERATION_COUNT = 5000;
private static MessageDigest md;
public static void main(String[] args) {
String pw = "teüöäßÖst1";
String salt = "e33ptcbnto8wo8c4o48kwws0g8ksck0";
try {
md = MessageDigest.getInstance("SHA-512");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new RuntimeException("No Such Algorithm");
}
String result = PwStorage.hashPw(pw, salt);
System.out.println(result);
// result: 2SzT+ikuO9FBq7KJWulZy2uZYujLjFkSpcOwlfBhi6VvajJMr6gxuRo5WvilrMlcM/44u2q8Y1smUlidZQrLCQ==
}
private static String hashPw(String pw, String salt) {
byte[] bSalt;
byte[] bPw;
try {
bSalt = salt.getBytes("UTF-8");
bPw = pw.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("Unsupported Encoding", e);
}
byte[] digest = run(bPw, bSalt);
for (int i = 0; i < PW_HASH_ITERATION_COUNT - 1; i++) {
digest = run(digest, bSalt);
}
return Base64.encodeBytes(digest);
}
private static byte[] run(byte[] input, byte[] salt) {
md.update(input);
return md.digest(salt);
}
}
使用 this Base64 库。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
阅读我的帖子,尤其是帖子我链接到关于密码哈希。
是的,您可以将
MessageDigest
用于 SHA-512。每次调用digest
时,对象的状态都会自动重置,这非常方便——您可以立即开始更新下一次迭代。但我仍然认为你应该使用 bcrypt 或 scrypt 代替。为了您自己的利益,也为了您的用户的利益。 :-)
Read my post here, especially the post I linked to about password hashing.
Yes, you can use
MessageDigest
for SHA-512. Each time you calldigest
, the state of the object automatically resets, which is really handy---you can start updating for the next iteration straight away.But I still think you should use bcrypt or scrypt instead. For your own good, and the good of your users. :-)
发现 HMAC 足以满足您想要做的事情,并且它只执行 2 次
迭代到
a HMAC is found to be sufficient for what you wanna do and it does only 2 iterations
it boils down to