Используйте SHA512Digest в CD1, как с помощью MessageDigest в Java - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь конвертировать Java API в CDI API шифрования ... у меня в Java этот метод:

private static byte[] encodePassword(String password,String salt) throws UnsupportedEncodingException 
         {                 
    String mergedPasswordAndSalt =mergePasswordAndSalt(password, salt);
    SHA512Digest digester =new  SHA512Digest();        
    byte[] hash = new byte[digester.getDigestSize()];   
             System.out.println("init hash= "+Base64.encode(hash));
    try {
        hash = mergedPasswordAndSalt.getBytes("UTF-8");  
        System.out.println("init merged= "+Base64.encode(hash));
        digester.doFinal(hash,0);  
          System.out.println("after");
    } catch (Exception ex) {
        System.out.println("Exception");                 
    }          
    for (int  i = 1; i < ITERATIONS; ++i) {            
        digester.doFinal(Bytes.concat(hash, mergedPasswordAndSalt.getBytes("UTF-8")),0); 
    }                 
    return hash;
}

и я пытаюсь использовать SHA512Digest так же, как это делают MessageDigest (в Java):

private static byte[] encodePassword(String password,String salt) throws UnsupportedEncodingException 
         {                 
    String mergedPasswordAndSalt =mergePasswordAndSalt(password, salt);
    SHA512Digest digester =new  SHA512Digest();

    byte[] hash = null;
    try {
        hash = mergedPasswordAndSalt.getBytes("UTF-8");           
        digester.doFinal(mergedPasswordAndSalt.getBytes("UTF-8"),0);            
    } catch (Exception ex) {
        System.out.println("Exception");                 
    }                    
    for (int i = 1; i < ITERATIONS; ++i) {            
        digester.doFinal(Bytes.concat(hash, mergedPasswordAndSalt.getBytes("UTF-8")),0);           
    }                   
    return hash;
}

Библиотека установлена ​​в моем проекте, но doFinal не работает ... Мне не удалось преобразовать Java в кодовое имя, когда я в результате шифрования возвращаю исходный хэш, не модифицированный doFinal

    init hash= AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAA==
init merged= MDAwMHtUZXdSLm1ldE9yTldrV1JTcWVJaHV4ejAvN2ZjeS5HUGIvS1l5c1BybkFZfQ==
Exception

and the method return Sha512{salt='TewR.metOrNWkWRSqeIhuxz0/7fcy.GPb/KYysPrnAY', hash='z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvYw=='}

1 Ответ

0 голосов
/ 05 мая 2018

нам нужно просто создать метод, который хэширует текущий ввод и возвращает тот хеш, который будет использоваться в следующей итерации:

public static byte[] digestt(byte[] bytes) {
Digest digest = new SHA512Digest();
byte[] resBuf = new byte[digest.getDigestSize()];

digest.update(bytes, 0, bytes.length);
digest.doFinal(resBuf, 0);
return resBuf;
}
...