Python DES EBC 加密解密代码示范

Python DES EBC 加密解密代码示范

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
from pyDes import des, ECB, PAD_PKCS5


def des_encrypt(s):
"""
DES 加密
:param s: 原始字符串
:return: 加密后字符串,16进制
"""
secret_key = 'ucserver'.encode()

k = des(secret_key, ECB, pad=None, padmode=PAD_PKCS5)
en = k.encrypt(s.encode(), padmode=PAD_PKCS5)
# return binascii.b2a_hex(en)
return base64.b64encode(en).decode()


def des_descrypt(s):
"""
DES 解密
:param s: 加密后的字符串,16进制
:return: 解密后的字符串
"""
secret_key = 'ucserver'.encode()

k = des(secret_key, ECB, pad=None, padmode=PAD_PKCS5)
de = k.decrypt(base64.b64decode(s), padmode=PAD_PKCS5)
return de.decode()

注意事项

python中还有一个库Crypto 也是用于加密的, 但是加密的结果和java不一致, 这是个坑, 以下是Crypto加密的代码, 用于对比:

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
from Crypto.Cipher import DES
import binascii
import base64

# data->被加密的字符串 key->密钥 同样传入字符串
def des_decode(data, key):
b_data = base64.b64decode(data)
cipher = DES.new(key.encode(), DES.MODE_ECB)
decrypted = cipher.decrypt(b_data)
decrypted.rstrip(b' ')
return decrypted.decode() # 解密完成后将加密时添加的多余字符'\0'删除




# data->被加密的字符串 key->密钥 同样传入字符串
def aes_encrypt(data, key):
# DES ECB模式 无需向量iv
cipher = DES.new(key.encode(), DES.MODE_ECB)
# 字符串转字节数组
b_data = data.encode()
# ------ 按照16位对其 不足的补空格 ----
block_size = DES.block_size
count = len(b_data)
# text不是16的倍数那就补足为16的倍数
add_count = block_size - (count % block_size)
s_plaintext = data + (' ' * add_count)
# ------ 按照16位对其 不足的补空格 ----

b_plaintext = s_plaintext.encode()
encrypted = cipher.encrypt(b_plaintext) # des加密

return base64.b64encode(encrypted).decode()

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%