Python使用Crypto加密并Base64编码

作者: 热血沸腾 | 来源:发表于2017-11-07 16:33 被阅读580次

注意点

一、秘钥必须是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

相关文章

网友评论

    本文标题:Python使用Crypto加密并Base64编码

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