RSA私钥加密解密

Copyright © 2018 Joyce_BY
All rights reserved.
Contact by [email protected]


实验原理及算法

  1. generate key
    本次仿真利用私钥(n,sID)生成公钥,具体过程如下:
    A)选择一对512bit的素数p,q,计算n = p * q;
    B)计算fn = (p-1) * (q-1);
    C)根据e * d ≡ 1 (mod fn)计算出公钥(n,e)。
    CODE
# key generation
def gen_key(p, q):
    n = p * q
    fn = (p - 1) * (q - 1)
    d = 16337053
    # generate e
    # use e*d = k*fn + 1
    x = fn
    while (x + 1) % d:
        x += fn 
    e = (x+1) // d
    # public key, self key
    return (n, e), (n, d)
  1. encryption and decryption
    加密:c ≡ m^e mod n
    解密::m ≡ c^d mod n
    将plaintext字符串转化为ascii十进制数字。
    CODE
def encryption(m, pk):
    n = pk[0]
    e = pk[1]
    c = square_mod(m, e, n)
    return c

def decryption(c, sk):
    n = sk[0]
    d = sk[1]
    m = square_mod(c, d, n)
return m

# get bit string of plaintext
    pt = 'test RSA'
    m = int(''.join(format(ord(ch)) for ch in pt))
  1. 模重复平方算法
    利用模重复平方算法求得大数取模的结果。
    CODE
# b^m (mod m)
def square_mod(base, n, m):
    b = base
    bin_exp = bin(n)[2:][::-1]
    a = 1
    for bit in bin_exp:
        if bit == '1': 
            a = a * b % m
        b = b * b % m
    return a

试验成功。

猜你喜欢

转载自blog.csdn.net/qq_35649764/article/details/83859163