信息安全密码体制实现

1. 拓展的欧几里得算法

from pprint import pprint

e = int(input("请输入公钥e:"))
n = int(input("请输入除数:"))

table = [('i', 'Q', 'R', 'x')]

assert n > e
table.append((0, 0, n, 0))
table.append((1, 0, e, 1))

while True:
    i = len(table)
    Q = table[-2][2] // table[-1][2]
    R = table[-2][2] % table[-1][2]
    x = table[-2][3] - Q * table[-1][3]
    table.append((i, Q, R, x))

    if R == 0:
        print("无逆元")
        break
    elif R == 1:
        assert x * e % n == 1
        print(f"逆元为{x}")
        break

pprint(table)

2. RSA密码体制

def RSA(
        mode: str,
        text: int or str,
        **kwargs
):
    text = int(text)
    e, d, p, q = kwargs.values()
    n = p * q
    if mode == 'encoding':
        print(f'当前需加密的明文为{text},公钥为({n},{d})')
        return text ** e % n
    elif mode == 'decoding':
        print(f'当前需解密的密文为{text},私钥为({n},{e})')
        return text ** d % n
    else:
        raise Exception('加密解密读取错误')


params = {
    'e': 13,
    'd': 937,
    'p': 43,
    'q': 59
}
RSA('encoding', '0802', **params)
RSA('decoding', '1324', **params)

 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值