파이썬 암호화 패키지 RSA 암호화/복호화에 문제가 없을 것 같습니다 100 %의 시간. 암호화 만 설치합니까?파이썬 암호화 RSA 문제
>>> test(1024,128,0)
(853, 147)
>>> test(1024,127,0)
(996, 4)
>>> test(2048,127,0)
(994, 6)
파이썬 암호화 패키지 RSA 암호화/복호화에 문제가 없을 것 같습니다 100 %의 시간. 암호화 만 설치합니까?파이썬 암호화 RSA 문제
>>> test(1024,128,0)
(853, 147)
>>> test(1024,127,0)
(996, 4)
>>> test(2048,127,0)
(994, 6)
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을 건너 뛴다 고 나머지 문자열로 암호화한다고 생각한다.
이 시도 :
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이 고려되지 않습니다 것을 의미하지 내부적으로 바이트에 번호를 운영하고 있습니다. encrypt
및 decrypt
은 매우 낮은 수준입니다.
Signature
패키지 (pycrypto2.5 +)를 사용해야합니다.이 패키지는 올바르게 메시지를 채우는 데 도움이됩니다. 그렇지 않으면 자신의 메시지를 덧붙여 야합니다.
고마워요! 이제 문제를 해결하는 방법을 알고 있습니다! – user1522840
또한 암호를 해독 할 때 문자열을 숫자로 처리하고 첫 번째 '\ x00'은 생략합니다. 이것은 해독 된 문자열 앞에 다시 붙여 져야합니다. – user1522840
나를 잘 보입니다. –