-
Notifications
You must be signed in to change notification settings - Fork 0
/
C_python代码学习加密解密方法(包含AES,RC4).txt
124 lines (87 loc) · 3.83 KB
/
C_python代码学习加密解密方法(包含AES,RC4).txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import sys
from Crypto import Random
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Cipher import ARC4
from base64 import b64encode, b64decode
import string
import os
import secrets
——————————————————————————————————————————————导入3方库
def generate_key():
alphabet = string.ascii_letters + string.digits # 包括大小写字母和数字
return ''.join(secrets.choice(alphabet) for i in range(32))
*************生成一个32位的KEY***********随机
def aes_encrypt(message, key, key_size=256):
# 对信息进行填充
message = pad(message, AES.block_size, style='pkcs7')
# 生成随机的初始化向量(IV)
iv = Random.new().read(AES.block_size)
# 创建一个新的AES加密对象
cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv)
# 返回加密后的信息,信息的开头是IV
return iv + cipher.encrypt(message)
def aes_decrypt(ciphertext, key):
# 从密文中提取初始化向量(IV)
iv = ciphertext[:AES.block_size]
# 创建一个新的AES解密对象
cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv)
# 使用AES解密密文,并去除填充
plaintext = unpad(cipher.decrypt(ciphertext[AES.block_size:]), AES.block_size, style='pkcs7')
return plaintext
*************AES的加密解密方法***********message必须为byte类型,key为str长度16位
def aes_encrypt_file(key, in_file, out_file):
# 打开并读取输入文件的内容
with open(in_file, 'rb') as fo:
plaintext = fo.read()
# 使用AES加密这些内容
enc = aes_encrypt(plaintext, key)
# 将加密后的内容写入输出文件
with open(out_file, 'wb') as fo:
fo.write(enc)
print(f'[*] Read File Bytes: {len(plaintext)}')
print(f'[*] AES Encrypted File Bytes: {len(enc)}')
print("[*] AES encrypted file written to: " + out_file)
# aes解密文件
def aes_decrypt_file(key, in_file, out_file):
with open(in_file, 'rb') as fo:
ciphertext = fo.read()
#ciphertext = b64decode(ciphertext)
dec = aes_decrypt(ciphertext, key)
#dec = b64decode(dec)
with open(out_file, 'wb') as fo:
fo.write(dec)
print(f'[*] Read File Bytes: {len(ciphertext)}')
print(f'[*] AES Decrypted File Bytes: {len(dec)}')
print("[*] AES decrypted file written to: " + out_file)
# rc4加密文件
def rc4_encrypt_file(key, in_file, out_file):
# 打开并读取输入文件的内容
with open(in_file, 'rb') as fo:
plaintext = fo.read()
# 创建一个新的RC4加密对象
cipher = ARC4.new(key.encode('utf-8'))
# 使用RC4加密这些内容
enc = cipher.encrypt(plaintext)
# 将加密后的内容写入输出文件
with open(out_file, 'wb') as fo:
fo.write(enc)
print(f'[*] Read File Bytes: {len(plaintext)}')
print(f'[*] RC4 Encrypted File Bytes: {len(enc)}')
print("[*] RC4 encrypted file written to: " + out_file)
# rc4解密文件
def rc4_decrypt_file(key, in_file, out_file):
# 打开并读取输入文件的密文内容
with open(in_file, 'rb') as fo:
ciphertext = fo.read()
# 创建一个新的RC4解密对象
cipher = ARC4.new(key.encode('utf-8'))
# 使用RC4进行解密,因为RC4是对称加密算法,所以加密和解密方法相同
dec = cipher.encrypt(ciphertext)
# 将解密后的内容写入输出文件
with open(out_file, 'wb') as fo:
fo.write(dec)
print(f'[*] Read File Bytes: {len(ciphertext)}')
print(f'[*] RC4 Decrypted File Bytes: {len(dec)}')
print("[*] RC4 decrypted file written to: " + out_file)
*************AES,RC4 加密文件方法***********