zoukankan      html  css  js  c++  java
  • Python标准库

    AES注意事项:

    1) 确保都使用AES_128 + ECB
    2) 确保明文填充都使用的是Pkcs7
    3) 加密key在AES_128长度必须是16, 24, 或者 32 字节(bytes);如果不够长必须填充,过长必须截取,建议直接md5;
    4) 加密向量iv与加密key有同样的约定,但在ECB可以忽略该值(用不到)。
    5) 注意加密结果建议都使用base64编码。

    只有以上都保持一样,各个语言里最终加密的密文才能保持一致,否则会出现:
    1) 每次加密的密文不一样,但是能解密;(iv随机生成导致的)
    2) 不同语言加密出来的密文不一致。

    需要先安装:

    pip install pycrypto
    pip install Crypto

    代码:

    # -*- coding=utf-8-*-
    
    from Crypto.Cipher import AES
    import os
    from Crypto import Random
    import base64
    
    """
    aes加密算法
    padding : PKCS7
    """
    
    class AESUtil:
    
        __BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size
    
        @staticmethod
        def encryt(str, key):
            #cipher = AES.new(key, AES.MODE_ECB,b'0000000000000000') #第三个参数是加密向量iv,ECB模式不需要
            cipher = AES.new(key, AES.MODE_ECB)
            x = AESUtil.__BLOCK_SIZE_16 - (len(str) % AESUtil.__BLOCK_SIZE_16)
            if x != 0:
                str = str + chr(x)*x
            msg = cipher.encrypt(str)
            # msg = base64.urlsafe_b64encode(msg).replace('=', '')
            msg = base64.b64encode(msg)
            return msg
    
        @staticmethod
        def decrypt(enStr, key):
            cipher = AES.new(key, AES.MODE_ECB)
            # enStr += (len(enStr) % 4)*"="
            # decryptByts = base64.urlsafe_b64decode(enStr)
            decryptByts = base64.b64decode(enStr)
            msg = cipher.decrypt(decryptByts)
            paddingLen = ord(msg[len(msg)-1])
            return msg[0:-paddingLen]
    
    if __name__ == "__main__":
        key = "1234567812345678"
        res = AESUtil.encryt("123456", key)
        print(res)
        print(AESUtil.decrypt(res, key))
    mdSm0RmB+xAKrTah3DG31A==
    123456

    摘抄链接:

    https://segmentfault.com/a/1190000009558962
  • 相关阅读:
    Python 函数 切片 迭代 列表生成器
    Python中各种集合 list tuple set dict
    Python学习 常识+基础基础
    《零基础学习Python》01
    原生API实现拖拽上传文件实践
    美团点评面试题小结(测试开发和前端开发)
    从实践的角度理解cookie的几个属性
    一道javascript面试题(闭包与函数柯里化)
    marked插件在线实时解析markdown的web小工具
    Github Page+Bmob实现简单动态功能
  • 原文地址:https://www.cnblogs.com/mcladyr/p/12636374.html
Copyright © 2011-2022 走看看