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)}")
RSA内部库原始加解密方式_test_python__文章1
于 2023-04-08 19:55:43 首次发布