# 常见的对称加密除了 AES ,还有 DES ,下面介绍一下 DES 中的 ECBCBC 加密方式

  1. # 使用 pydes

    • 安装 pyDes 模块
    pip install pyDes
    • python 实现代码
    from pyDes import des, CBC, PAD_PKCS5
    import base64
    def des_CBC(s, encry=True):
        """
        DES 加密
        :param s: 原始字符串
        :param encry: 
        		- 默认 True 加密
        		- False 解密
        :return: 加密后字符串,16进制
        """
        # k 必须传入 8 位
        key = "6HPjSZFH"
        iv = "YdVi_XPU"
        cbc = des(key, CBC, iv, pad=None, padmode=PAD_PKCS5)	# 如果是 ECB 这里换成 ECB 即可
        # 加密
        if encry:
            en_str = cbc.encrypt(s)
            return base64.b64encode(en_str).decode()
        # 解密
        else:
            de_str = base64.b64decode(s)
            return cbc.decrypt(de_str).decode('utf8')
  2. # 使用 crypto 模块

    • 安装模块

      pip install pycryptodome	# 支持 py2 和 py3
    • 代码

      import base64
      from Crypto.Cipher import DES
      def des_ECB(s, encry=True):
          """
          DES ECB加密
          :param s: 原始字符串
          :param encry: True->>加密,False->>解密
          :return: 加密 或者 解密后的字符串
          """
          key = "2f5bc41a"
          des = DES.new(key, DES.MODE_ECB) # 初始化 ECB 模式的实例,	如果是 CBC 模式,这里换成 MODE_CBC 即可,q
          # 加密
          if encry:
              count = len(s.encode('utf-8'))
              diff = DES.block_size - (count % DES.block_size) # 补位数,使原始字串为 block_size 的倍数 block_size 默认是 16
              data = s + (chr(diff) * diff)	
              ret = des.encrypt(data.encode("utf8"))
              return str(base64.b64encode(ret))
          # 解密
          else:
              # 去除填充的字符
              unpad = lambda info: info[0:-ord(info[-1])]
              ret = base64.b64decode(s.encode("utf8"))
              return unpad(des.decrypt(ret).decode("utf8"))
  3. # 如果是 hex 格式,把 base64 换成下列函数加解密即可

    from binascii import a2b_hex, b2a_hex
    # b2a_hex 对应 b64encode 编码
    # a2b_hex 对应 b64decode 解码
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

渣渣文 微信支付

微信支付

渣渣文 支付宝

支付宝