2014-06-23 137 views
0

任何人都可以告訴我在下面的代碼中128 * 8的用法是什麼? 我已經寫了密碼加密的代碼,我仍然不知道這個128 * 8在做什麼。PBKDF2WithHmacSHA1混淆

這是我得到儘可能從這個代碼的返回:

67a0759ac6266ca2156555426aae10b18c34b436ea036247e6c0e16cd8d4199b9df508c32cd14e50a533ac00c071888cb8167982d9bf22a89ccd1c02a9d9c76d4e5fb5c3be91711a444a3b453c54790d5b540d7f3d0ef5798cf6a08e5acaf1b0fb445e174befd2e5b97978534aa7c22c4e404503e40f06f6832fe4a5843c9b01

的toHex()函數如下所示:我想返回值是字符。

private static String toHex(byte[] array) throws NoSuchAlgorithmException 
    { 
     BigInteger bi = new BigInteger(1, array); 
     String hex = bi.toString(16); 
     int paddingLength = (array.length * 2) - hex.length(); 
     if(paddingLength > 0) 
     { 
      return String.format("%0" +paddingLength + "d", 0) + hex; 
     }else{ 
      return hex; 
     } 
    } 



public static String encrypt(String password,String key) throws NoSuchAlgorithmException, InvalidKeySpecException { 

     int iterations = 4096; 
     char[] chars = password.toCharArray(); 
     byte[] salt = key.getBytes(); 

     PBEKeySpec spec = new PBEKeySpec(chars, salt, iterations, 128 * 8); 
     SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 
     byte[] hash = skf.generateSecret(spec).getEncoded(); 
     return toHex(hash); 
    } 
+0

所以返回的字符串的長度是64個字符? –

+0

(我也會在這裏選擇你的名字,這不是加密,這是密鑰生成,我也強烈建議你不要使用無參數的'String.getBytes'方法。) –

+0

Ya它是一個祕密密鑰生成。你能告訴我什麼是128 * 8,爲什麼我得到256位的返回值? – user3387358

回答

2

128 * 8是請求的密鑰長度,按照documentation

keyLength-將被派生的密鑰長度。

目前還不清楚,它是在位,但它是。所以你要求一個長度爲1024位的密鑰(因爲128 * 8 = 1024)。

您將得到一個十六進制表示,它是256個個字符長,每個都是十六進制數字。一個十六進制數字編碼4位,所以你有一個1024位長的密鑰,正如你所要求的。

+0

我不知道返回的值是位還是字符。請看看我編輯的帖子。你是否認爲你的解釋是正確的? – user3387358

+0

@ user3387358:是的,雖然這不是我如何做十六進制轉換。你對「一點點」是什麼瞭解多少,以及十六進制是如何工作的? –

+0

我對位和十六進制沒有太多的理解。這就是我困惑的原因。你有什麼資料可以閱讀嗎? – user3387358

0

的第四參數是密鑰長度

PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength) 

構造,需要一個口令,鹽,迭代計數,和待導出密鑰長度,用於產生可變密鑰尺寸的PBE的PBEKey調用密碼。

+0

你能告訴我什麼是128 * 8,爲什麼我得到256位的返回值? – user3387358

+0

請參閱下面@ jon-skeet的解釋 - 您確定響應是256位而不是256個字符嗎? – pwilmot

+0

我不知道它的位或字符。我將編輯我的帖子。 – user3387358