今天写代码的时候,拼接的时候用\0
空格去拼接字符串。然后用字符串方法rstrip(" ")去除的空格,怎么使都不行。调试代码我没注意用len()方法查看长度一致没变。找了好久原来是我前后一处用了\0
,一处用的" "
.这尼玛浪费我这么长时间活生生的教训。所以记录下来。
DES分组加密解密这个方法我原本是不准备封装的。考虑好久还是封装一下吧。加密结果如果MODE 模式是OFB,iv=iv时,加密结果每次都会变。指定iv=key加密结果才会不变。key的值可以放在公共配置文件里面。代码目前我没放,其实问题不大。
还有平时我们数据都是字典格式的,这里加密的内容我就当着普通字符串处理。如果公司你们是key=value形式可以写个方法处理一下这个字典,因为有的字典里面是带sign,这些数据需要剔除用个循环处理一下就行了。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
# @Time : 2020/9/5 19:36
# @File : handledes.py
# @Author: adeng
# @Date : 2020/9/5
============================
"""
import binascii
from Crypto.Cipher import DES
class HandleDES:
@staticmethod
def des_encrypt(text, key=b"dyunrena"):
"""
DES 对称法加密text
text:需要加密的文本
key:8位,必须是byte,默认值可以做成 配置文件,以后修改直接修改配置文件
"""
des = DES.new(key, DES.MODE_OFB, iv=key)
name_text = text + (8 - len(text) % 8) * " "
encrypt_text = des.encrypt(name_text.encode("utf-8"))
return binascii.b2a_hex(encrypt_text).decode()
@staticmethod
def des_decrypt(text, key=b"dyunrena"):
"""
DES 对称法加密text,类型str
text:需要加密的文本
key:8位,必须是byte.默认值可以做成 配置文件,以后修改直接修改配置文件
"""
des = DES.new(key, DES.MODE_OFB, iv=key)
# 解密
decrypt_text = des.decrypt(binascii.a2b_hex(text.encode("utf-8"))) # 返回是一个 b
return decrypt_text.decode("utf-8").rstrip(" ")
if __name__ == '__main__':
print(__name__)
print("加密:", HandleDES.des_encrypt('我叫阿登啊啊啊 '))
print(len('我叫阿登啊啊啊 '))
print("解密:", HandleDES.des_decrypt(HandleDES.des_encrypt('我叫阿登啊啊啊 ')))
print(len(HandleDES.des_decrypt(HandleDES.des_encrypt('我叫阿登啊啊啊 '))))
网友评论