首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android sha512示例

android sha512示例
EN

Stack Overflow用户
提问于 2011-06-18 01:28:52
回答 2查看 15.8K关注 0票数 2
  1. 有人能为java/android提供一个示例,说明如何使用PW_HASH_ITERATION_COUNT迭代sha512 + salt来散列密码吗? 在伪码中: hash = sha512(concat(pw,salt));for (i = 1;i其中z = concat(x,y)是x和y的级联。 也许用MessageDigest
  2. 你认为PW_HASH_ITERATION_COUNT是什么?有多少次迭代是最大的,这样甚至可以在一些旧设备(2.1+)上运行。

更新更新

由于有充分的理由,我们将使用bcrypt加密我们的密码。我们使用jBCrypt实现。

不管怎样..。回答这个问题..。以上问题的代码是在MessageDigest中使用SHA-512的代码:

代码语言:javascript
复制
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);
    }
}

这个Base64库

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-18 01:38:22

在这里阅读我的职位,特别是我链接到的关于密码散列的文章。

  • 理想情况下,您应该使用bcrypt或scrypt,而不是自己进行密码散列。
  • 但是如果必须的话,您应该至少运行几千次迭代,最好是更多。

是的,您可以将MessageDigest用于SHA-512。每次调用digest时,对象的状态都会自动重置,这非常方便--您可以立即开始更新下一次迭代。

但我还是觉得你应该用bcrypt或者still来代替。为了你自己的利益和你的用户的利益。:-)

票数 4
EN

Stack Overflow用户

发布于 2011-06-18 02:14:34

发现一个HMAC足以完成您想要做的事情,并且它只执行两次迭代。

归结为

代码语言:javascript
复制
hash = sha512(concat(xor(salt,nonce2),sha512(concat(xor(salt,nonce1),pw)));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6393292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档