美文网首页
DES加密解密,如何让每次的加密结果一致。

DES加密解密,如何让每次的加密结果一致。

作者: 阿登20 | 来源:发表于2020-09-05 19:41 被阅读0次

今天写代码的时候,拼接的时候用\0空格去拼接字符串。然后用字符串方法rstrip(" ")去除的空格,怎么使都不行。调试代码我没注意用len()方法查看长度一致没变。找了好久原来是我前后一处用了\0,一处用的" ".这尼玛浪费我这么长时间活生生的教训。所以记录下来。
DES分组加密解密这个方法我原本是不准备封装的。考虑好久还是封装一下吧。加密结果如果MODE 模式是OFB,iv=iv时,加密结果每次都会变。指定iv=key加密结果才会不变。key的值可以放在公共配置文件里面。代码目前我没放,其实问题不大。

还有平时我们数据都是字典格式的,这里加密的内容我就当着普通字符串处理。如果公司你们是key=value形式可以写个方法处理一下这个字典,因为有的字典里面是带sign,这些数据需要剔除用个循环处理一下就行了。

image.png
#!/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('我叫阿登啊啊啊  '))))

相关文章

网友评论

      本文标题:DES加密解密,如何让每次的加密结果一致。

      本文链接:https://www.haomeiwen.com/subject/mdbfektx.html