2012-07-13 3 views
4

파이썬 암호화 패키지 RSA 암호화/복호화에 문제가 없을 것 같습니다 100 %의 시간. 암호화 만 설치합니까?파이썬 암호화 RSA 문제

>>> test(1024,128,0) 
(853, 147) 
>>> test(1024,127,0) 
(996, 4) 
>>> test(2048,127,0) 
(994, 6) 
+0

나를 잘 보입니다. –

답변

1

NUL (\x00')으로 시작하는 입력 문자열에 대해 각 암호 해독 오류가 발생합니다. 원래 문자열을 해독 된 버전과 비교하면 원본이 '\x00'으로 시작되고 복구 된 버전은 첫 번째 바이트가 제거됨을 알 수 있습니다 (예 :

>>> a = '\x00\xa4\x8aE\xb5,\x1a\x95)Q' 
>>> b = k.decrypt(k.encrypt(a, urandom(rand_len))) 
>>> a == b 
False 
>>> len(a) 
10 
>>> len(b) 
9 
>>> a 
'\x00\xa4\x8aE\xb5,\x1a\x95)Q' 
>>> b 
'\xa4\x8aE\xb5,\x1a\x95)Q' 

첫 번째 바이트 외에도 a와 b는 같습니다.

분명히 NUL은 C 문자열 종료에 중요하지만 원래 문자열을 단순히 빈 문자열로 취급하는 것보다는이 방법으로 실패합니다. 나는 라이브러리가 어떤 선도 NUL을 건너 뛴다 고 나머지 문자열로 암호화한다고 생각한다.

3

이 시도 :

from Crypto.PublicKey import RSA 
from os import urandom 
def test(keylen, datalen, rand_len): 
    k = RSA.generate(keylen) 
    ok, fail = (0,0) 
    for i in range(1000): 
     a = urandom(datalen).lstrip(b'\x00') 
     if a == k.decrypt(k.encrypt(a, urandom(rand_len))): 
      ok += 1 
     else: 
      fail += 1 
    return ok, fail 

설명 :

pycrypto가 앞에 0이 고려되지 않습니다 것을 의미하지 내부적으로 바이트에 번호를 운영하고 있습니다. encryptdecrypt은 매우 낮은 수준입니다.

Signature 패키지 (pycrypto2.5 +)를 사용해야합니다.이 패키지는 올바르게 메시지를 채우는 데 도움이됩니다. 그렇지 않으면 자신의 메시지를 덧붙여 야합니다.

+0

고마워요! 이제 문제를 해결하는 방법을 알고 있습니다! – user1522840

+0

또한 암호를 해독 할 때 문자열을 숫자로 처리하고 첫 번째 '\ x00'은 생략합니다. 이것은 해독 된 문자열 앞에 다시 붙여 져야합니다. – user1522840