2013-05-02 1 views
2

공개 키 및 개인 키를 생성하는 데 Java 암호화를 사용하고 있습니다. 그것을 생성하기 위해 String.getBytes()을 사용하고 있습니다. 그러나 해독하는 동안 키를 얻으려면 동일한 String.getBytes()을 사용하고 있습니다. 그러나 나는 이전과 똑같은 열쇠를 얻지 못하고있다. 도와주세요. 아래는 코드 샘플입니다.동일한 임의의 시드에서 동일한 키 쌍을 생성 할 수 없습니다.

KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA"); 
SecureRandom ss = null; 
ss = new SecureRandom("ABCD".getBytes(UNICODE_FORMAT)); 
keyGenerator.initialize(512, ss); 
KeyPair myKeyPair = keyGenerator.generateKeyPair(); 

System.out.println(myKeyPair.getPrivate()); 
System.out.println(myKeyPair.getPublic()); 
+0

제목을 개선 할 수 있습니다. –

+0

코드 샘플은 하나의 키 쌍만 생성하므로 문제를 시연하지 않습니다. 문제를 재현하는 예제 코드를 갖도록 조정하십시오. –

답변

2

이 코드는 비대칭 암호화가 어떻게 사용되는지에 대한 근본적인 오해가 있음을 나타냅니다. 보낸 사람과받는 사람은 각각 독립적 인 키 쌍을 가져야합니다. 보낸 사람은받는 사람의 공개 키를 사용하여 데이터를 암호화합니다.

당신이하는 일은 고정 된 문자열을 사용하여 두 위치에서 동일한 키 쌍을 생성하는 것입니다. 키 스페이스를 512 비트 (이미 너무 작음 - 최소 1024 비트 사용)에서 (아마도 짧은) 문자열과 관련된 엔트로피까지 줄이면 안전하지 않습니다.

양쪽 끝에 키를 유도하는 데 '비밀번호'문자열을 사용하려면 대칭 알고리즘 (예 : AES)과 PBKDF2와 같은 비밀번호 유도 기능을 사용하십시오.

+0

이전에 생성 된 동일한 개인 키와 공개 키를 검색 할 수있는 방법이 있습니까? 데이터가 그다지 중요하지 않은 불안정한 상황이라 할지라도. – keyanwb

+0

@ user2342659 글쎄, 당신의 현재 접근 방식 * 매번 같은 열쇠 쌍을 생산할 것이다. 당신이 그것을 얻지 못한다면 어딘가에서 오류를 범했습니다. 질문을 수정하여 문제를 나타내는 [SSCCE] (http://sscce.org/)를 포함 시키십시오. –

+0

안녕하세요 존스, 동일한 키가 창에 생성 중입니다. 그러나 유닉스에서는 실패했다. 또한 정보에 대한 문자열 "ABCD"는 DB 값입니다. – keyanwb

관련 문제