값이 p,q,d = 61,53,17
인 RSA 암호화 및 암호 해독 코드를 구현했습니다. 위키 백과에서 언급 한대로이 값들을 사용했습니다. 나는 p와 q가 프라임이어야하고 d는 ph와 (n)이 상대적으로 소수가되도록 선택된다고 믿는다.작은 소수로 RSA 암호화 파이썬이 작동하지 않습니다
값을 p,q,d = 3,17,19
으로 변경하면 암호 해독이 작동하지 않습니다. 이걸 좀 도와 주실 수 있습니까? 당신이 d
을 부르는
#!/usr/bin/python3
# -*- coding: utf-8 -*-
def main():
str = 'computer'
p,q,d = 61,53,17
#p,q,d = 3,17,19
cipher_text = list()
plain_text = list()
for c in str:
cipher_char = EncryptCharRSA(c, p, q ,d)
cipher_text.append(cipher_char)
for x in cipher_text:
plain_char = DecryptCharRSA(x, p, q, d)
plain_text.append(plain_char)
print ('Original Message: ', str)
print ('Encrypted Message(UTF-8 Unicode characters) : ', end='')
for element in cipher_text:
print(element,end = '')
print ('\nDecrypted Message: ', end='')
for element in plain_text:
print(element,end='')
def EncryptCharRSA(msg , p, q, d):
n = p * q
phi = (p-1) * (q-1)
cipher_no = 0
cipher_char = ''
for c in msg:
# conver char to ascii for calculation
cipher_no = (ord(c)** d) % n
cipher_char = chr(cipher_no)
return cipher_char
#print (cipher_no)
#plain_no = (cipher_no ** d) % n
def DecryptCharRSA(msg,p, q,d):
n = p * q
phi = (p-1) * (q-1)
e = ModularMultiplicativeInverse(d,phi)
for c in msg:
plain_no = (ord(c) ** e) % n
plain_char = chr(plain_no)
return plain_char
# Get modular multiplicative inverse
def ModularMultiplicativeInverse(d,n):
i = 1
while True:
if (d * i) % n == 1:
return i
i = i + 1
if __name__ == '__main__' : main()
'for' 루프 내부의'return'은 의도적입니까? – RafazZ
예. 문자를 암호화/해독 한 후에는 문자를 main() 함수로 반환합니다. –