任何人都可以告訴我在下面的代碼中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);
}
所以返回的字符串的長度是64個字符? –
(我也會在這裏選擇你的名字,這不是加密,這是密鑰生成,我也強烈建議你不要使用無參數的'String.getBytes'方法。) –
Ya它是一個祕密密鑰生成。你能告訴我什麼是128 * 8,爲什麼我得到256位的返回值? – user3387358