zoukankan      html  css  js  c++  java
  • python 实现 AES ECB模式加解密

    AES ECB模式加解密
    使用cryptopp完成AES的ECB模式进行加解密。

    AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个。(8比特 == 1字节)

    在CBC、CFB、OFB、CTR模式下除了密钥外,还需要一个初始化向IV。(ECB模式不用IV)

    代码:

      

    # -*- 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, iv):
            cipher = AES.new(key, AES.MODE_ECB,iv)
            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, iv):
            cipher = AES.new(key, AES.MODE_ECB, iv)
            # 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"
        iv = "1234567812345678"
        res = AESUtil.encryt("123456", key, iv)
        print res # mdSm0RmB+xAKrTah3DG31A==
        print AESUtil.decrypt(res, key, iv) # 123456
  • 相关阅读:
    win10没有新建文件夹
    js暂停的函数
    Mini ORM——PetaPoco笔记
    阻止网页内部滚动条mousewheel事件冒泡
    setTimeout调用带参数的函数的方法
    spring入门--Spring框架底层原理
    spring入门——applicationContext与BeanFactory的区别
    mybatis的Sql语句打印
    Sql语句中IN和exists的区别及应用
    Jenkins学习
  • 原文地址:https://www.cnblogs.com/xuchunlin/p/11421788.html
Copyright © 2011-2022 走看看