Skip to content
Snippets Groups Projects

python rsa decrypt shit

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    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))
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment