RSA内部库原始加解密方式_test_python__文章1

import rsa
import random

def data_comparison(num1, num2, *args):
    if num1 != num2:
        # print(f"num1:{num1}\nnum2: {num2}")
        print("数据对比错误", args[0])
    else:
        print("数据对比一致", args[0])

(pub_key, priv_key) = rsa.key.newkeys(128)  # 生成密钥 (PublicKey(n, e), PrivateKey(n, e, d, p, q))
print(f"RSA公钥:{pub_key}, 模长{rsa.common.byte_size(pub_key.n)}")
print(f"RSA私钥:{priv_key}, 模长{rsa.common.byte_size(priv_key.n)}")
print(f"RSA公钥n:{pub_key.n},公钥e:{pub_key.e}")
print(f"RSA私钥n:{priv_key.n},私钥e:{priv_key.e},私钥d:{priv_key.d},私钥p:{priv_key.p},私钥q:{priv_key.q}")

# priv_key_n = rsa.transform.int2bytes(priv_key.n, rsa.common.byte_size(priv_key.n))   # 将数字转为byte
# print(f"priv_key_e{list(priv_key_n)}, 长度{len(priv_key_n)}")
# priv_key_d = rsa.transform.int2bytes(priv_key.d, rsa.common.byte_size(priv_key.d))   # 将数字转为byte
# print(f"priv_key_d{list(priv_key_d)}, 长度{len(priv_key_d)}")

# 生成随机数据
for j in range(1000):
    # print(f"第{j}次")
    padded = []
    length_num = rsa.common.byte_size(priv_key.n)  # 获取模长 RSA位长/8
    for i in range(length_num):
        padded.append(random.randint(0, 255))
    for i in range(1):  # 明文大小超过模长n时,会报错  https://blog.csdn.net/jennyvenus/article/details/7193417
        padded[i] = 1
    padded = bytes(padded)
    # print(f"原始数据{int.from_bytes(padded, 'big', signed=False)}, 长度{padded.__len__()}")
    payload = rsa.transform.bytes2int(padded)  # 将字节转为数字
    encrypted = rsa.core.encrypt_int(payload, pub_key.e, pub_key.n)  # 公钥加密
    decrypted = priv_key.blinded_decrypt(encrypted)  # 私钥解密

# 测试1
encrypted = rsa.core.encrypt_int(payload, pub_key.e, pub_key.n)  # 公钥加密
decrypted = rsa.core.encrypt_int(encrypted, pub_key.e, pub_key.n)  # 公钥加密
data_comparison(payload, decrypted, "测试1:公钥加密,公钥加密")  # 数据对比是否一致
# 测试2
encrypted = priv_key.blinded_encrypt(payload)  # 私钥加密
decrypted = priv_key.blinded_decrypt(encrypted)  # 私钥解密
data_comparison(payload, decrypted, "测试2:私钥加密,私钥解密")  # 数据对比是否一致
# 测试3
encrypted = priv_key.blinded_decrypt(payload)  # 私钥解密
decrypted = priv_key.blinded_encrypt(encrypted)  # 私钥加密
data_comparison(payload, decrypted, "测试3:私钥解密,私钥加密")  # 数据对比是否一致
# 测试4
encrypted = priv_key.blinded_encrypt(payload)  # 私钥加密
decrypted = rsa.core.encrypt_int(encrypted, pub_key.e, pub_key.n)  # 公钥加密
data_comparison(payload, decrypted, "测试4:私钥加密,公钥加密")  # 数据对比是否一致
print(f"加密数据{encrypted}, 长度{rsa.common.byte_size(encrypted)}")
print(f"原始数据{payload}, 长度{rsa.common.byte_size(payload)}")
print(f"解密数据{decrypted}, 长度{rsa.common.byte_size(decrypted)}")

# 测试5
encrypted = priv_key.blinded_decrypt(payload)  # 私钥解密
decrypted = rsa.core.encrypt_int(encrypted, pub_key.e, pub_key.n)  # 公钥加密
data_comparison(payload, decrypted, "测试5:私钥解密,公钥加密")  # 数据对比是否一致
print(f"加密数据{encrypted}, 长度{rsa.common.byte_size(encrypted)}")
print(f"原始数据{payload}, 长度{rsa.common.byte_size(payload)}")
print(f"解密数据{decrypted}, 长度{rsa.common.byte_size(decrypted)}")

# 测试6
encrypted = rsa.core.encrypt_int(payload, priv_key.d, priv_key.n)  # 私钥加密
decrypted = rsa.core.encrypt_int(encrypted, pub_key.e, pub_key.n)  # 公钥加密
data_comparison(payload, decrypted, "测试6:私钥加密,公钥加密")  # 数据对比是否一致
print(f"加密数据{encrypted}, 长度{rsa.common.byte_size(encrypted)}")
print(f"原始数据{payload}, 长度{rsa.common.byte_size(payload)}")
print(f"解密数据{decrypted}, 长度{rsa.common.byte_size(decrypted)}")

# 测试7
encrypted = rsa.core.encrypt_int(payload, pub_key.e, pub_key.n)  # 公钥加密
decrypted = priv_key.blinded_decrypt(encrypted)  # 私钥解密
data_comparison(payload, decrypted, "测试7:公钥加密,私钥解密")  # 数据对比是否一致
print(f"加密数据{encrypted}, 长度{rsa.common.byte_size(encrypted)}")
print(f"原始数据{payload}, 长度{rsa.common.byte_size(payload)}")
print(f"解密数据{decrypted}, 长度{rsa.common.byte_size(decrypted)}")

# 测试7--重复
encrypted = rsa.core.encrypt_int(payload, pub_key.e, pub_key.n)  # 公钥加密
decrypted = priv_key.blinded_decrypt(encrypted)  # 私钥解密
data_comparison(payload, decrypted, "测试7:公钥加密,私钥解密")  # 数据对比是否一致
print(f"加密数据{encrypted}, 长度{rsa.common.byte_size(encrypted)}")
print(f"原始数据{payload}, 长度{rsa.common.byte_size(payload)}")
print(f"解密数据{decrypted}, 长度{rsa.common.byte_size(decrypted)}")

decrypted = rsa.transform.int2bytes(decrypted, length_num)   # 将数字转为byte
encrypted = rsa.transform.int2bytes(encrypted, length_num)   # 将数字转为byte
print(f"加密数据{list(encrypted)}, 长度{len(encrypted)}")
print(f"原始数据{list(padded)}, 长度{len(padded)}")
print(f"解密数据{list(decrypted)}, 长度{len(decrypted)}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值