2012-06-18 2 views
1

암호 사용에 몇 가지 질문이 있습니다. 내가 년의 SecretKeyFactory 클래스를 사용하려고Java에서 PKCS # 5 PBKDF1의 알고리즘 이름은 무엇입니까? java에서 CryptoPP :: PKCS5_PBKDF1을 대체 할 수있는 것은 무엇입니까?

: 나는 AES

질문 1을 사용하고 있습니다. PBKDF1 PKCS # 5와 관련된 인스턴스를 얻으려고합니다. 나는 암호학을 처음 사용합니다. 나는 인터넷을 시도했지만 Iam은 그런 알고리즘을 찾을 수 없었다. 그것을 지원합니다. 나는 이런 것을 원해.

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF1Pkcs#5"); 
    KeySpec spec = new PBEKeySpec(password, salt, 1, 128); 

질문 2 :

코드의 위의 두 라인이 C 코드의 아래 라인 ++

::PKCS5_PBKDF1 <::MD5> fn; 
fn.DeriveKey(key, CRYPTO::MD5::DIGESTSIZE, 0, key.getBytes(), salt.getBytes(), salt.size(), PBKDF1_ITERATIONS,time_in_seconds); 

하지 어떤 하나 개주고이 할 수있는 경우와 같은 일을합니까 C++ 코드의 위 라인이 모방 할 수있는 몇 가지.

감사

답변

4

재 : 상담자 Java 6 API docs for SecretKeyFactory 당 1

, 키 사양이에 generateSecret 및 getKeySpec에서 지원하는 알아 바이더의 문서를 참조 해

응용 프로그램 개발자 행동 양식. 예를 들어, 「SunJCE」프로 바이더에 의해 제공되는 DES 시큐리티 열쇠 팩토리는, DES 열쇠의 투명한 표현으로서 DESKeySpec를 지원해, 그 트리플시 키에 대한 그 프로 바이더의 비밀 열쇠 팩토리는 DESedeKeySpec를 Triple DES 키의 투명한 표현으로서 지원합니다. 우리가 PKCS에 대한 SunJCE provider documentation 보면

, 우리는 ...

사용해 PBEWithMD5AndDES를 참조하십시오 암호 기반 암호화 알고리즘에 정의 : RSA 연구소, "PKCS # 5 : 암호 기반 암호화 Standard "버전 1.5, 1993 년 11 월.이 알고리즘은 CBC를 암호 모드로, PKCS5Padding을 패딩 구성표로 사용하며 다른 암호 모드 또는 패딩 구성표와 함께 사용할 수 없습니다.

재 : 질문 동일한 문서에서 2

, 암호 기반 암호화를 사용하여 섹션 에서, 당신은 다음 예제 코드를 찾을 수 있습니다. 샘플 코드는 정적 소금을 사용하지만 보안 구현에서는 사용자가 암호를 변경할 때마다 임의의 소금을 생성합니다.

PBEKeySpec pbeKeySpec; 
PBEParameterSpec pbeParamSpec; 
SecretKeyFactory keyFac; 

// Salt 
byte[] salt = { 
    (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c, 
    (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99 
}; 

// Iteration count 
int count = 20; 

// Create PBE parameter set 
pbeParamSpec = new PBEParameterSpec(salt, count); 

// Prompt user for encryption password. 
// Collect user password as char array (using the 
// "readPasswd" method from above), and convert 
// it into a SecretKey object, using a PBE key 
// factory. 
System.out.print("Enter encryption password: "); 
System.out.flush(); 
pbeKeySpec = new PBEKeySpec(readPasswd(System.in)); 
keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); 
SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec); 

// Create PBE Cipher 
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES"); 

// Initialize PBE Cipher with key and parameters 
pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec); 

// Our cleartext 
byte[] cleartext = "This is another example".getBytes(); 

// Encrypt the cleartext 
byte[] ciphertext = pbeCipher.doFinal(cleartext); 

다른 알고리즘 같은 페이지에서 다시

.정말, 나는 당신이 < > 그리고 < 암호화 > 또는 PBEWith <PRF> 그리고 < 암호화 >을 소화 아마 당신은 다른 질문에 대답 할뿐만 아니라, 모든 것을 읽어

PBEWith 추천 : 비밀 키를 PKCS # 5 암호 기반 암호화와 함께 사용하기위한 팩토리. < 다이제스트 >은 메시지 다이제스트입니다. <prf>은 의사 랜덤 함수이고 < 암호화 >은 암호화 알고리즘입니다. 예 : PBEWithMD5AndDES (PKCS # 5, v 1.5) 및 PBEWithHmacSHA1AndDESede (PKCS # 5, v 2.0). 참고 :이 두 가지 모두 각 암호 문자의 하위 8 비트 만 사용합니다.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 나는 실제로 AES를 사용하고 있습니다. 나는 문서에서 AES와 관련된 알고리즘을 찾지 못했습니다. PBEWithMD5AndAES와 같은 것을 아십니까? – javaMan

+1

오늘 MD5를 사용하고 싶지는 않습니다. – Puppy

+0

@DeadMG 당신 말이 맞습니다. 하지만 그것은 나를위한 요구 사항입니다. – javaMan

관련 문제