gpt4 book ai didi

java - java中的Symfony FOSUser Hash算法

转载 作者:行者123 更新时间:2023-11-30 10:31:39 24 4
gpt4 key购买 nike

嘿,每个人都在试图找出我的 symfony FOS User Bundle 使用了哪种哈希算法 我做了一些研究,它提到 FOSUser Bundle 默认安全配置使用 Sha512() 并将其迭代 5000 次 + salt 然后 bas64 编码 我实际上是这些 hash 算法的新手,但这是php

中的算法
$password = 'toto';
$salt = '1234';
$salted = $password.'{'.$salt.'}';
$digest = hash('sha512', $salted, true);

for ($i=1; $i<5000; $i++) {
$digest = hash('sha512', $digest.$salted, true);
}

$encodedPassword = base64_encode($digest);
}

摘自这篇文章How do I generate a SALT in Java for Salted-Hash?

因为我不熟悉 java hash libraries 谁能帮我把这段代码翻译成 Java !

最佳答案

解决方案是使用 Java API 对密码进行编码,如 MessageDigestPasswordEncoder :

  1. 生成盐(长度=43):

    private static String generateSalt() {
    SecureRandom random = new SecureRandom();
    byte[] salt = new byte[SALT_SIZE];
    random.nextBytes(salt);
    String saltBase64_encoded=BaseEncoding.base64().encode(salt);
    String saltPlusDot= saltBase64_encoded.replace("+",".");
    return saltPlusDot.substring(0,saltPlusDot.length()-1);

BaseEncoding.base64() 是 commons-codec api 中的一个类

  1. 连接:密码 + { + 盐 + }:

    private static String mergePasswordAndSalt(String pass, String salt) {
    if (salt == null) {
    return salt;
    }
    String cg="{";String cd="}";
    return pass+cg+salt+cd;

  2. 对于每个额外的迭代:散列前一个摘要的连接 +盐:

private static byte[] encodePassword(字符串密码,字符串盐)抛出 NoSuchAlgorithmException,UnsupportedEncodingException {

    String mergedPasswordAndSalt =mergePasswordAndSalt(password, salt);  
MessageDigest digester = MessageDigest.getInstance(ALGORITHM);

byte[] hash = digester.digest(mergedPasswordAndSalt .getBytes("UTF-8"));

for (int i = 1; i < ITERATIONS; ++i) {


hash = digester.digest(Bytes.concat(hash, mergedPasswordAndSalt.getBytes("UTF-8")));

}
return hash;
}

Bytes.concat(bytes ...) 是 guava 19.0 api 中的一个方法

这是github中的API FOSJcrypt

关于java - java中的Symfony FOSUser Hash算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43090024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com