You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
python/client_createcip.py

62 lines
2.2 KiB

import base64
import hashlib
import rsa
from Crypto.Cipher import AES, DES3
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from pyDes import ECB, PAD_PKCS5, des
def createcip(path, op):
# 传输的文件
filename = path
# 加密对称密钥
with open("../server/Bpubkey.pem", mode="rb") as f:
pub = f.read()
pubkey = rsa.PublicKey.load_pkcs1(pub)
message = "12345678" if op == "DES" else "1234567812345678"
info = rsa.encrypt(message.encode("utf-8"), pubkey)
with open("encryptedkeyfile.bin", "wb") as key_file: # 生成加密文本encryptedkeyfile
key_file.write(info)
# 加密文件 DES算法加密
with open(filename, "r", encoding="utf-8") as f:
plaintext = f.read()
x = plaintext
while len(x) % 16 != 0: # 如果text不足16位的倍数就用空格补足为16位
x += "\0"
x = x
if op == "DES":
SECRET_KEY = message
print(len(message))
iv = SECRET_KEY
des_obj = des(SECRET_KEY, ECB, iv, padmode=PAD_PKCS5)
secret = des_obj.encrypt(x)
elif op == "AES_ECB":
SECRET_KEY = message.encode()
aes_obj = AES.new(SECRET_KEY, AES.MODE_ECB)
secret = aes_obj.encrypt(x.encode())
elif op == "AES_CBC":
iv = message.encode()
SECRET_KEY = message.encode()
aes = AES.new(SECRET_KEY, AES.MODE_CBC)
secret = aes.encrypt(x.encode())
with open("encryptedfile.txt", "wb") as cip: # encryptedfile
cip.write(secret)
# 计算摘要值以及签名
out1 = hashlib.sha256(plaintext.encode('"utf-8"')).hexdigest()
out1 = out1.encode("utf-8")
privkey_key_file = open("./Aprivkey.pem", "rb").read().decode("utf-8")
# 导入公钥返回一个RSA秘钥对象
private_key = RSA.importKey(privkey_key_file)
h = SHA256.new(out1)
signer = PKCS1_v1_5.new(private_key)
signature = signer.sign(h)
# 对需要加密的消息进行PKCS#1 v1.5加密再使用Base64对类似字节的对象进行编码。
sig = base64.b64encode(signature)
with open("sigfile.bin", "wb") as f: # 生成签名文件sigfile
f.write(sig)