Python使用Crypto/pyDes,DES并Base64编码

注意点

一、秘钥必须是8位
二、待加密的明文长度必须是8的倍数,不足则补空字符

第三方库

from Crypto.Cipher import DES
import base64

加密函数

def encrypt_des(cipher):
    if cipher is None:
        return ""
    try:
        key = '1234A#CD'
        # ECB方式
        generator = DES.new(key, DES.MODE_ECB)
        # 非8整数倍明文补位
        pad = 8 - len(cipher) % 8
        pad_str = ""
        for i in range(pad):
            pad_str = pad_str + chr(pad)
        # 加密
        encrypted = generator.encrypt(cipher + pad_str)
        # 编码得密文
        result = base64.b64encode(encrypted)
        print "cipher : "+str(cipher)+"  encrypted : "+result
        return result
    except Exception, e:
        print Exception, ":", e
        return ""
测试
print encrypt_des("1234567890")
输出
cipher : 1234567890  encrypted : jHgeV9zr6EVnSM7n7LG63g==

解密函数

def decrypt_des(encrypted):
    if encrypted is None:
        return ""
    try:
        key = '1234A#CD'
        # ECB方式
        generator = DES.new(key, DES.MODE_ECB)
        # 解码
        crypted_str = base64.b64decode(encrypted)
        # 解密
        result = generator.decrypt(crypted_str)
        # 替换非空格字符(诡异的串)
        result = result.strip("�����")
        result = result.strip("������")
        print "encrypted : "+str(encrypted)+"  cipher :"+result
        return result
    except Exception, e:
        print Exception, ":", e
        return ""
测试
print decrypt_des("jHgeV9zr6EVnSM7n7LG63g==")
输出
encrypted : jHgeV9zr6EVnSM7n7LG63g==  cipher :1234567890

第二种pyDes

为什么要说第二种,因为我在本地Python2.7通过pip安装Crypto始终安装不上. 遇到和我同样问题的朋友可以用该方式解决DES加解密

安装

pip install pyDes

引入

from pyDes import des, ECB, PAD_PKCS5
import base64

加密代码(注意输出结果要encode,不然打印出来是b'' 字节输出)

def des_encrypt(s):
    secret_key = '1234A#CD'
    iv = secret_key
    k = des(secret_key, ECB, iv, pad=None, padmode=PAD_PKCS5)
    en = k.encrypt(s.encode('utf-8'), padmode=PAD_PKCS5)
    return str(base64.b64encode(en), 'utf-8')

解密

 def des_descrypt(s):
    secret_key = '1234A#CD'
    iv = secret_key
    k = des(secret_key, ECB, iv, pad=None, padmode=PAD_PKCS5)
    de = k.decrypt(base64.b64decode(s), padmode=PAD_PKCS5)
    return de
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文主要介绍移动端的加解密算法的分类、其优缺点特性及应用,帮助读者由浅入深地了解和选择加解密算法。文中会包含算法的...
    苹果粉阅读 13,965评论 5 29
  • 一、Base64 原理: base64的编码都是按字符串长度,以每3个8bit的字符为一组, 然后针对每组,首先获...
    谢谢生活阅读 10,294评论 7 33
  • 随着对于安全度的不断要求,对于数据加解密与破解之间的斗争,加解密的方式也在不断发生着变化,来看看现在流行的一些加解...
    zhouhao_180阅读 6,464评论 1 12
  • “旧时王谢堂前燕,飞入寻常百姓家”,我读小学时候在语文课本上看到的首都天安门广场烟花,如今早已成为寻常百姓过春节的...
    飘逸的风2017阅读 3,848评论 0 0
  • ​王者荣耀是现在最火的手机游戏,没有之一。玩王者荣耀的大多知道:一代版本一代神。意思就是每次王者荣耀出大的版本变更...
    chaoswong阅读 3,199评论 0 1

友情链接更多精彩内容