Add 4 reproducible solved examples (ps_and_qs, lost_modulus, a2s, russian_threesome) + examples README
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,42 @@
|
||||
from Crypto.Util.number import *
|
||||
|
||||
|
||||
class Key:
|
||||
def __init__(self, bits):
|
||||
assert bits >= 512
|
||||
self.p = getPrime(bits)
|
||||
self.q = getPrime(bits)
|
||||
self.n = self.p * self.q
|
||||
self.e = 0x100007
|
||||
self.d = inverse(self.e, (self.p-1)*(self.q-1))
|
||||
self.dmp1 = self.d%(self.p-1)
|
||||
self.dmq1 = self.d%(self.q-1)
|
||||
self.iqmp = inverse(self.q, self.p)
|
||||
self.ipmq = inverse(self.p, self.q)
|
||||
|
||||
def encrypt(self, data):
|
||||
num = bytes_to_long(data)
|
||||
result = pow(num, self.e, self.n)
|
||||
return long_to_bytes(result)
|
||||
|
||||
def decrypt(self, data):
|
||||
num = bytes_to_long(data)
|
||||
v1 = pow(num, self.dmp1, self.p)
|
||||
v2 = pow(num, self.dmq1, self.q)
|
||||
result = (v2*self.p*self.ipmq+v1*self.q*self.iqmp) % self.n
|
||||
return long_to_bytes(result)
|
||||
|
||||
def __str__(self):
|
||||
return "Key([e = {0}, n = {1}, x = {2}, y = {3}])".format(self.e, self.d, self.iqmp, self.ipmq)
|
||||
|
||||
def main():
|
||||
key = Key(1024)
|
||||
flag = open('flag').read()
|
||||
encrypt_flag = key.encrypt(flag)
|
||||
assert key.decrypt(encrypt_flag) == flag
|
||||
print key
|
||||
print encrypt_flag.encode('hex')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user