java - Java 中带或不带盐的哈希值

标签 java encryption salt

我正在尝试制定一种带或不带盐编码为 SHA(128,256,512) 的方法。不加盐的方法是

private static String crypt(String chain, String method) {
    MessageDigest md;
    try {
        md = MessageDigest.getInstance(method);
        md.update(chain.getBytes("UTF-8"));
        byte[] mb = md.digest();
        String out = "";
        for (int i = 0; i < mb.length; i++) {
            byte temp = mb[i];
            String s = Integer.toHexString(new Byte(temp));
            while (s.length() < 2) {
                s = "0" + s;
            }
            s = s.substring(s.length() - 2);
            out += s;
        }
        return out;

    } catch (Exception e) {
        System.out.println("ERROR: " + e.getMessage());
    }
    return null;
}

方法可以在哪里

private final static String MD5="MD5";
private final static String SHA_128="SHA-1";
private final static String SHA_256="SHA-256";
private final static String SHA_384="SHA-384";

但我也想要一个方法 crypt(String chain,String salt, String method)。我尝试将行更改为:

byte[] mb=md.digest(salt.getBytes("UTF-8");

但它不会返回正确的链(与 php 调用 hash_hmac('sha256','pass','salt') 相比)。我该如何解决这个问题,或者在哪里可以找到针对这些算法具有可选盐的方法?谢谢

最佳答案

参见How are these 2 lines of PHP different?了解 HMAC 和仅与盐连接之间的区别。

关于java - Java 中带或不带盐的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10391314/

相关文章:

java - 像常量一样工作的变量的命名约定

java - XmlRPC : The method addHandler is undefined for the type WebServer

java - 重用从类返回的用户输入值,而不重新请求用户输入

java - 将字符串转换为二进制并再次转换回来不会给出相同的字符串

android - 智能手机(Android、iOS 等)上的 DRM

java - Java中图像转换为字节数组

.net - 您如何在 .Net 中安全地存储加密 key ?

java - 如何在 Flash 或 Java 中隐藏 salt 代码?

hash - 如何在c#中实现pbkdf2_sha256

mysql - 有没有办法将 sha256 转换为 md5 哈希