python rsa decrypt shit
The snippet can be accessed without any authentication.
Authored by
Jakob Berger
bleh.py 1.86 KiB
cp: int = int(pow(q, -1) % p)
cq: int = int(pow(p, -1) % q)
dp: int = d % (p - 1)
dq: int = d % (q - 1)
def decrypt_chinese_rest(x):
xp: int = x % p
xq: int = x % q
# 2
print('pow pow powpow', type(xq))
yp: int = pow(xp,dp) % p
yq: int = pow(xq,dq) % q
# 3
print('c done')
return q * cp * yp + p * cq * yq % n
def decrypt_naive(x):
result: int = pow(x, d)
print(type(result))
result: int = result % n
print(type(result))
print('n done')
return result
def benchmark_chunky(x):
results = []
i = 0
for c in bytearray(x):
results.append(benchmark(i, c))
i += 1
elapsed_naive = 0.0
elapsed_chinese = 0.0
for result in results:
elapsed_naive = elapsed_naive + result[0]
elapsed_chinese = elapsed_chinese + result[1]
print('----------------------------------------------------\n',
elapsed_naive, elapsed_chinese, elapsed_naive - elapsed_chinese, 1.0 - (elapsed_chinese / elapsed_naive))
def benchmark(i, x):
encrypt = key.encrypt(x, None)[0]
start_chinese = time()
result_chinese = decrypt_chinese_rest(encrypt)
stop_chinese = time()
elapsed_chinese = stop_chinese - start_chinese
start_naive = time()
result_naive = decrypt_naive(encrypt)
stop_naive = time()
elapsed_naive = stop_naive - start_naive
if result_chinese != x or result_naive != x:
raise AssertionError('decryption unsuccessful, naive %i, chinese: %i' % (result_naive ,result_chinese))
print(i + 1, elapsed_naive, elapsed_chinese, elapsed_naive - elapsed_chinese, 1.0 - (elapsed_chinese/elapsed_naive))
return elapsed_naive, elapsed_chinese
# benchmark
print('\t'.join(['#', 'naive duration', 'chinese duration', 'difference', '%']))
for i in range(50):
benchmark_chunky(number.getRandomInteger(2048))
Please register or sign in to comment