2012-08-12 110 views
0

我想使用gnu.crypto.hash.Whirlpool哈希加密字符串。Java示例使用gnu-crypto jar對漩渦進行加密pwd

加密應該加密密碼,並且應該返回加密的密碼。 encrypt(pwd);

此方法應具有實現用於使用GNU罐子和漩渦加密PWD
散列算法 這應該是等於由下面站點 http://hash.online-convert.com/whirlpool-generator

我用下面的代碼試圖產生的PWD但我無法獲得類似於生成的漩渦網站的512個字節代碼:

import gnu.crypto.hash.HashFactory; 
import gnu.crypto.hash.IMessageDigest; 

    public class EncryptPwdWithAPI{ 
public static void main(String arg[]) 
{ 
     encrypt("somepwd"); 
    } 
public static String encrypt(String password) 
{ 
IMessageDigest md = HashFactory.getInstance("WHIRLPOOL"); 
md.update(input, 0, input.length); 
byte[] digest = md.digest(); 
System.out.println("Input : "+new String(input)+ "\nPWD : "+new String(digest) 
} 

}

+0

請不包括在帖子中,絕不會包含電子郵件地址,並顯示您自己的一些努力 - 所以不是幫助臺。 – 2012-08-12 10:10:49

+0

:)我試着用下面的方法,但我無法得到類似於生成的漩渦網站的512字節代碼。 \t IMessageDigest md = HashFactory.getInstance(「WHIRLPOOL」); \t md.update(input,0,input.length); \t \t byte [] digest = md.digest(); \t的System.out.println( \t \t \t 「輸入:」 +新的字符串(輸入)+ \t \t \t 「\ nPWD:」 +新的字符串(摘要) \t \t \t); – Azhar 2012-08-12 10:26:18

+0

當我使用Whirlpool的bouncycastle庫實現時,我獲得了與PHP相同的輸出。 – 2014-06-29 23:07:44

回答

3

Ya正確,但我期待與512字節的漩渦hascode相當於在線哈希碼生成器生成的代碼。 我得到了預期的輸出JacksumAPI

下面是一些代碼:「簽名」

import java.security.NoSuchAlgorithmException; 

import jonelo.jacksum.JacksumAPI; 
import jonelo.jacksum.algorithm.AbstractChecksum; 

public class JacksumTest { 
    public static void main(String arg[]) 
    { 
     String password = "somepwd"; 
     AbstractChecksum checksum = null; 
     try { 
      checksum = JacksumAPI.getChecksumInstance("whirlpool"); 
      checksum.update(password.getBytes()); 
      System.out.println(checksum.getFormattedValue()); 
     } catch (NoSuchAlgorithmException nsae) { } 
    } 
} 
0

您直接將字節值用作字符值,而不是將字節數組轉換爲十六進制或base64編碼,以將其與whirlpool站點上的值進行比較。 Apache Commons Codec提供十六進制和base64功能。

import org.apache.commons.codec.binary.Base64; 
... 
    Base64.encodeBase64String(digest); 
+0

感謝您的回覆,但它沒有返回與[link] http://hash.online-convert.com/whirlpool-generator生成的結果相同的結果 – Azhar 2012-08-12 20:52:08

0

@Eelke是正確的,但這是你怎麼做的,編碼密碼應該在結果變量中。

IMessageDigest oldencoder = HashFactory.getInstance(Registry.WHIRLPOOL_HASH); 

    byte[] input = password.getBytes(); 

    oldencoder.update(input, 0, input.length); 

    byte[] digest = oldencoder.digest(); 

    result = gnu.crypto.util.Util.toString(digest).toLowerCase();