2010-05-15 4 views
1

나는 El Gamal 암호 시스템을 가지고 놀고 있으며, 나의 목표는 긴 텍스트 시퀀스를 암호화하고 해독 할 수 있도록하는 것이다.ElGamal을 구현하면 긴 텍스트 문자열을 사용할 수없는 이유는 무엇입니까?

El Gamal은 평문을 정수로 요구합니다. String에 대해 .getBytes() 메서드를 사용하여 문자열을 []로 바꾼 다음 [] 바이트에서 BigInteger를 작성했습니다. 암호화/해독 후 BigInteger에 대해 .toByteArray() 메서드를 사용하여 BigInteger를 byte []로 변환 한 다음 byte []에서 새 String 객체를 만듭니다.

나는 1035 비트 키를 사용하고 있는데, 최대 129 자까지 문자열을 암호화/해독 할 때 완벽하게 작동합니다. 130 개 이상의 문자를 사용하면 암호 해독 방법에서 생성 된 출력이 왜곡됩니다.

누군가이 문제를 해결하는 방법을 제안 할 수 있습니까?

+0

놀 수있는 테스트 장치를 줄 수 있습니까? 이 메소드를 호출하는 예제는 무엇입니까? – polygenelubricants

+0

코드를 약간 수정하고 문제를 설명하는 주요 방법을 추가했습니다. 도와 주셔서 감사합니다! – angstrom91

답변

6

마찬가지로 RSA와 마찬가지로 ElGamal의 모듈러스보다 큰 값을 암호화 할 수 없습니다.

+1

+1. 이 말이 맞습니다. @ angstrom91 : 구현하는 알고리즘을 이해하려고 시간을 할애해야합니다. 그러면 이런 종류의 문제에 빠지지 않습니다.문자열을 분할하고 각 청크를 인코딩해야합니다. – back2dos

+0

오, 그렇습니다. UTF- * 8 *은 4 비트가 아닌 8 비트로 인코딩됩니다! 그러므로 내가 예상했던 것처럼 258이 아니라 129 자의 한계! – angstrom91

0

당신은 인코딩/디코딩 및함으로써 암호화/더 대칭을 해독을하기 위해

BigInteger pText = new BigInteger(plaintext.getBytes("UTF-8")); 

을 시도 할 수 있지만, 그 근본 원인입니다 있는지 확실하지 않습니다.

그런데 결코 자동으로 Exception을 사용해서는 안됩니다. 적어도 할 수있는 일은 단지 catch (UnsupportedEncodingException e)입니다.

+0

UTF 인코딩은 문제를 해결하기 위해 시도한 것입니다. 그 전에 내 버그가 생겼어. 원래 문제를 반영하도록 코드를 수정했습니다. – angstrom91

+0

@angst :'main()'에 대한 감사, 나는 그걸 가지고 놀 수 있었지만, 무엇이 잘못되었는지를 알아 내지 못했습니다, 미안 해요. – polygenelubricants

0

작업에 양수를 사용해야합니다. 따라서 BigInteger를 이와 같이 구성해야합니다.

BigInteger pText = new BigInteger(1, plaintext.getBytes()); 
// 1: select a random integer k such that 1 <= k <= p-2 
BigInteger k = abs(new BigInteger(p.bitLength() - 2, sr)); 
+0

아, 팁 주셔서 감사. 그것은 내 문제를 해결하지 못했지만 적어도 나는 그 원인을 규명 할 수 있습니다. – angstrom91

+0

@angst : 실제로 생성자는 이미 양수인지 확인합니다. – polygenelubricants

0

특정 데이터를 비대칭 암호화 알고리즘으로 암호화하려면 정말로 짧은 데이터 블록에만이 작업을 수행 할 수 있습니다. 그 이유는 "기술"(알고리즘은이 방법으로 작동 함)과 "실용적"(비대칭 암호화는 은 느림입니다)입니다.

비대칭 암호화 알고리즘을 사용하여 데이터의 큰 블록을 암호화하는 올바른 방법은

  1. 일부 대칭 알고리즘 (AES, RC4, 3DES, 당신은 그것을 이름)에 대한 임의 ("세션") 키를 생성합니다. 데이터
  2. 를 암호화하는
  3. 사용이 알고리즘은 세션 키
  4. 저장에게 데이터 근처의 암호화 키를 암호화하기 위해 비대칭 알고리즘을 사용합니다.
  5. 바퀴의 재발 명 중지