【问题标题】:How to use PBKDF2 in java to get the same result as c#?如何在 java 中使用 PBKDF2 来获得与 c# 相同的结果?
【发布时间】:2020-12-16 20:12:47
【问题描述】:

我想用 PBKDF2 散列将我的 c# 代码转换为 java 并获得相同的结果(没有真正的产品,只是测试)。

C#:

static string Pbkdf2Hashing(string password)
    {
        byte[] salt = new byte[128 / 8];
        string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
            password: password,
            salt: salt,
            prf: KeyDerivationPrf.HMACSHA1,
            iterationCount: 10000,
            numBytesRequested: 256 / 8));
        return hashed;
    }

结果:

  1. 列表项

    oudaCubzWVIMjTxaQh1KT85fn+p2KjQRdBDXpiS8AUA=

Java:

 static String Pbkdf2Hashing(String password) throws Exception {
    byte[] salt = new byte[128 / 8];
    int iterations = 10000;
    int derivedKeyLength = 256;
    KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterations, derivedKeyLength);
    SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
    byte[] result = f.generateSecret(spec).getEncoded();
    return Base64.getEncoder().encodeToString(result);
}

结果:

dxtD2eQ/4Sj5pGnPqCTiuL6jns5apO1OHkTaJC9DTzw=

【问题讨论】:

    标签: java c# hash pbkdf2


    【解决方案1】:

    为了使 Java 代码给出与 C# 代码相同的结果,只需将 Java 代码中的 PBKDF2WithHmacSHA256 替换为 PBKDF2WithHmacSHA1

    由于您没有将明文发布到示例中,因此我使用明文进行测试

    The quick brown fox jumps over the lazy dog
    

    C#代码和固定Java代码都返回

    mPfEIpaydCQU15ACyPW+jPh/ctqi8q74aWhO9nWz9Q0=
    

    结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多