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
  • 相关阅读:
    330. Patching Array--Avota
    334. Increasing Triplet Subsequence My Submissions Question--Avota
    C++前置++与后置++的区别与重载
    OpenGL光源位置
    深度探索va_start、va_arg、va_end
    C++类型转换
    2019-2020-2 20175216 《网络对抗技术》Exp9 Web安全基础
    2019-2020-2 20175216 《网络对抗技术》Exp8 Web基础
    2019-2020-2 20175216 《网络对抗技术》Exp7 网络欺诈防范
    2019-2020-2 20175216 《网络对抗技术》Exp6 MSF基础应用
  • 原文地址:https://www.cnblogs.com/mcladyr/p/12636374.html
Copyright © 2011-2022 走看看