2014-06-23 2 views
0

아래 코드에서 128 * 8의 사용법은 누구에게 말해 줄 수 있습니까? 암호 암호화를위한 코드를 작성했지만이 128 * 8이 무엇을하는지 아직 알지 못합니다.PBKDF2WithHmacSHA1 혼동

이이 코드에서 반환으로 무엇을 얻을 수 있습니다 :

67a0759ac6266ca2156555426aae10b18c34b436ea036247e6c0e16cd8d4199b9df508c32cd14e50a533ac00c071888cb8167982d9bf22a89ccd1c02a9d9c76d4e5fb5c3be91711a444a3b453c54790d5b540d7f3d0ef5798cf6a08e5acaf1b0fb445e174befd2e5b97978534aa7c22c4e404503e40f06f6832fe4a5843c9b01

toHex() 함수는 다음과 같습니다 : I는 반환 값이 문자 생각합니다.

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

예 그것의 비밀 키 생성. 128 * 8이 무엇이고 왜 256 비트의 반환 값을 얻는 지 말해 줄 수 있습니까? – user3387358

답변

2

128 * 8은 documentation에 따라 요청 된 키 길이입니다.

keyLength - 유도 키 길이.

비트 수가 적지 만 명확하지 않습니다. 1024 비트 길이의 키를 요구합니다 (128 * 8 = 1024이기 때문에).

16 진수 숫자 인 256 문자가 길이 인 16 진수 표시가 나타납니다. 하나의 16 진수 숫자는 4 비트를 인코딩하므로 요청한대로 1024 비트 길이의 키가 있습니다.

+0

반환 값이 비트인지 문자인지 알 수 없습니다. 제 편집 된 게시물을보십시오. 아직도 당신의 설명이 옳다고 생각하니? – user3387358

+0

@ user3387358 : 예, 그렇다고해서 어떻게 16 진수 변환을 할 수있는 것은 아닙니다. "조금"이 무엇인지, 그리고 어떻게 16 진수가 작동하는지에 대해 얼마나 많은 이해가 있습니까? –

+0

비트와 16 진수를 많이 알지 못합니다. 그것이 내가 혼란스러워하는 이유입니다. 내가 그걸 읽을 수있는 곳이 있니? – user3387358

0

제 4 파라미터는 키 길이를 가변 키 사이즈 PBE의 PBEKey를 생성하기위한 키 길이 유래 될-패스워드 염, 반복 횟수를 받아,

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

생성자 인 암호.

+0

128 * 8이 무엇이고 왜 256 비트 반환 값을 얻는 지 알 수 있습니까? – user3387358

+0

아래 @jon-skeet의 설명을 참조하십시오. 응답은 256자가 아닌 256 비트입니까? – pwilmot

+0

나는 비트 또는 문자로 그것의 모를. 내 게시물을 수정합니다. – user3387358