栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

潇洒郎: 加密算法学习:DES、AES、RSA

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

潇洒郎: 加密算法学习:DES、AES、RSA

潇洒郎: 加密算法学习:DES、AES、RSA 

Python知识点

 Python 中,数字0-9、英文字母a-zA-Z、小数点.、下划线_以及空格 ,各占一个字节,而一个汉字可能占 2~4 个字节,具体占多少个,取决于采用的编码方式。

1字节=8bit/位(2进制,1位只有0和1两种表示)

汉字在 GBK/GB2312 编码中占用 2 个字节,而在 UTF-8 编码中一般占用 3 个字节。

Python3 默认使用utf-8 编码

len(str) 返回的是字节数, 即单位为 字节/byte

str1 = "人生苦短,我用Python"  # 6个汉字,1个中文逗号,6个英文,共占7*3+6=27
print(len(str1.encode())) #27
str1 = "人生苦短,我用Python"  # 7*2+6=20
print(len(str1.encode('gbk'))) # 20

DES

DES 简介

  •       DES: Data Encryption Standard  数据加密标准,是对称性加密里常见的加密算法。         秘钥长度为是64位/bit (8bytes; 8个字节, Python中的8位 (数字或英文)), 超过位数秘钥被忽略。 不足8字节需要填充         常见的填充模式有:'PKCS5'、'PKCS7'、'ISO10126'、'ANSIX923'、'ZERO' 类型,包括DES-ECB、DES-CBC、DES-CTR、DES-OFB、DES-CFB。         所谓对称性加密,加密和解密秘钥相同。对称性加密一般会按照固定长度,把待加密字符串分成块。不足一整块或者刚好最后会有特殊填充字符。 DES原理

            DES算法的入口参数:Key、Data、Mode : Key为8个字节共64位,是DES算法的工作秘钥; Data也为8个字节64位,是要被加密或解密的数据;Mode为DES的工作方式,有两种:加密或解密。        DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。        使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。        DES算法特点:分组比较短、秘钥太短、密码生命周期短、运算速度较慢。 Python3实现

    环境依赖安装:pip install pycryptodome
    import base64
    from urllib import request
    from Crypto.Cipher import AES,DES
    
    #DES加密
    def des_encrypt(text): # 传入未编码的文本字符串
        text = request.quote(text)
        aes = DES.new(add_to_8(KEY),DES.MODE_ECB)
        encrypt_aec = aes.encrypt(add_to_8(text))
        encrypt_text = str(base64.encodebytes(encrypt_aec),encoding="utf-8").strip()
        return encrypt_text
    
    #DES解密
    def des_decrypt(text): # 传入加密后的文本字符串
        aes = DES.new(add_to_8(KEY),DES.MODE_ECB)
        decrypt_aec = base64.decodebytes(text.encode(encoding='utf-8'))
        decrypt_text = str(aes.decrypt(decrypt_aec),encoding='utf-8').replace("",'')
        decrypt_text = request.unquote(decrypt_text)
        return decrypt_text
    
    #补足8位/byte 并返回bytes 如果是3DES,要import DES3,然后 add_to_16即可
    def add_to_8(value):
        while len(value) % 8 != 0:
            value = value + ""
        return value.encode(encoding='utf-8')
    
    text2 = "我爱你,不是因为你的魅力"
    print("原文本信息:n",text2)
    KEY = "nihaoyaa"  # 长度为8,单位为字节
    tt=des_encrypt(text2)
    print('DES加密:n',tt)
    tt2= des_decrypt(tt)
    print('DES解密:n',tt2)

  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/757575.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号