本帖最后由 rangersxiaoyan 于 2022-7-13 16:01 编辑
RSA实例1.1生产秘钥.py
[Python] 纯文本查看 复制代码 import rsa
import time
v_秘钥强度 = 128
v_开始时间 = time.time()
(v_公钥, v_私钥) = rsa.newkeys(v_秘钥强度 * 8)
print('耗时:', time.time() - v_开始时间)
with open('公钥.pem', 'w+') as f:
f.write(v_公钥.save_pkcs1().decode())
with open('私钥.pem', 'w+') as f:
f.write(v_私钥.save_pkcs1().decode())
RSA实例3.1加密图片.py
[Python] 纯文本查看 复制代码 import rsa
import time
with open('公钥.pem', 'r') as f:
v_公钥 = rsa.PublicKey.load_pkcs1(f.read().encode())
with open(file='原始图片.jpg', mode='rb') as f:
v_需要加密的数据 = f.read()
v_秘钥强度 = 128 # 这里128代表是字节,x8就是位。这里的长度1024位
v_分割长度 = int(v_秘钥强度 - 11) # 实际加密可以字节要-11,剩下的才能正常使用。
v_数据长度 = int(len(v_需要加密的数据)) # 数据长度就是图片的长度
if v_数据长度 % v_分割长度 == 0: # 求余数是否为0,决定分割份数是否+1
v_分割份数 = int(v_数据长度 / v_分割长度)
else:
v_分割份数 = int(v_数据长度 / v_分割长度 + 1)
start = time.time()
v_加密的数据 = bytes()
for i in range(v_分割份数):
a = i * v_分割长度
b = a + v_分割长度
v_密文 = rsa.encrypt(v_需要加密的数据[a:b], v_公钥)
v_加密的数据 = v_加密的数据 + v_密文
print('加密耗时:', time.time() - start)
with open(file='加密图片', mode='wb') as f:
f.write(v_加密的数据)
RSA实例3.2解密图片.py
[Python] 纯文本查看 复制代码 import rsa
import time
with open(file='私钥.pem', mode='r') as f:
v_私钥 = rsa.PrivateKey.load_pkcs1(f.read().encode())
with open(file='加密图片', mode='rb') as f:
v_加密的数据 = f.read()
v_秘钥强度 = 128
v_数据长度 = len(v_加密的数据)
v_分割长度 = int(v_秘钥强度)
v_分割份数 = int(v_数据长度 / v_分割长度)
start = time.time()
# 解密
v_解密的数据 = bytes()
for i in range(v_分割份数):
# print(i)
a = i * v_秘钥强度
b = a + v_秘钥强度
v_解密明文 = rsa.decrypt(v_加密的数据[a:b], v_私钥)
v_解密的数据 = v_解密的数据 + v_解密明文
print('解密耗时:', time.time() - start)
with open(file='解密图片.jpg', mode='wb') as f:
f.write(v_解密的数据)
在实验中发现,需要加密的数据过长,就会加密失败。所以需要对数据切片分割以此来正常加密数据,解密也要分割数据解密。
最后就能得到原始数据。注意秘钥长度不能太长,不然解密时间能让你怀疑人生。
提供研究专用图片
https://pic.kissgoddess.com/gallery/27559/38194/s/0.jpg
|