专栏首页python3AES 加密解密示例(walker)

AES 加密解密示例(walker)

AES 简介

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。 这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。 该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之名命之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhine doll"。)

示例(Python3)

  • 第三方包安装
pip3 install pycryptodome -i https://pypi.doubanio.com/simple/
pip3 install pkcs7 -i https://pypi.doubanio.com/simple/
  • code
# encoding=utf-8
# author: walker
# date: 2019-09-19
# summary: AES 加密解密示例(CBC模式,pkcs7占位)

import time
import base64
from urllib import parse
from Crypto.Cipher import AES
from pkcs7 import PKCS7Encoder

def encrypt_aes_pkcs7(plaintext, key, iv):
    r""" 加密
    plaintext: 明文
    key: 密钥
    iv: 偏移量
    """
    encoder = PKCS7Encoder()
    aes = AES.new(key, AES.MODE_CBC, iv)
    padtext = encoder.encode(plaintext)
    cipherbytes = aes.encrypt(padtext.encode('utf8'))
    ciphertext = base64.b64encode(cipherbytes).decode('utf8')
    return ciphertext

def decrypt_aes_pkcs7(ciphertext, key, iv):
    r""" 解密
    plaintext: 密文
    key: 密钥
    iv: 偏移量
    """
    encoder = PKCS7Encoder()
    aes = AES.new(key, AES.MODE_CBC, iv)
    cipherbytes = base64.b64decode(ciphertext.encode('utf8'))
    padtext = aes.decrypt(cipherbytes).decode('utf8')
    plaintext = encoder.decode(padtext)   
    return plaintext

if __name__ == '__main__':
    key = b'1CF28E8DBB1F36F9DE50C06ADFFD942B'
    iv = key[0:16]
    timestamp = time.time()

    print('timestamp: %f (%s)' % 
            (timestamp, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))))
    plaintext = "%s*%s" % (timestamp, r'walker snapshot')
    print('plaintext: %s' % plaintext)
    print('key: %s' % key)
    print('iv: %s' % iv)

    assert(plaintext == decrypt_aes_pkcs7(encrypt_aes_pkcs7(plaintext, key, iv), key, iv))
    
    ciphertext = encrypt_aes_pkcs7(plaintext, key, iv)
    print('ciphertext: %s' % ciphertext)

相关链接

本文出自 walker snapshot

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在windows上安装Python cr

    出现这个问题是因为为安装过程中需要libeay32.dll,ssleay32.dll

    用户2398817
  • 第26讲 python文件的格式化写入

    head='%10s %10s %10s \n' % ('ID','Name','Record')

    用户2398817
  • Python中的NULL和None

    与C不同的是,在python中是没有NULL的,取而代之的是None,它的含义是为空,但要注意和空列表与空字符串是不一样的,None的类型是Nonetype

    用户2398817
  • redis(二)redis的运用与缓存穿透,雪崩的处理

    找到springboot的配置文件,添加配置,这里使用的是application.properties,application.yml类似

    杨小杰
  • Redis笔记(三):Redis常用命令

    启动 redis 客户端,打开终端并输入命令 redis-cli。该命令会连接本地的 redis 服务。

    朝雨忆轻尘
  • MySQL中explain中的结果字段介绍(三)

    之前的文章中对于explain的数据结果中的字段已经进行了一部分介绍了,今天来说一说剩下的几个字段,为了防止忘记,先看看这个表结构:

    AsiaYe
  • MySQL源码解析之slow log实现机制

    Mysql slow log提供了一种方式对数据库中慢查询进行记录并且对日志进行输出,以便于我们定位服务器性能问题。我们可能会简单的把它理解为记录所有执行时间超...

    数据库架构之美
  • 实例讲解redis字符串类型

    章鱼喵
  • 理论探究篇-MySQL源码解析之slow log实现机制

    Mysql slow log提供了一种方式对数据库中慢查询进行记录并且对日志进行输出,以便于我们定位服务器性能问题。我们可能会简单的把它理解为记录所有执行时间超...

    数据库架构之美
  • Redis的安装及基本使用1.Redis2.Redis安装3.redis常见配置4.redis数据操作5.redis发布订阅6.主从双备

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串(strings), ...

    意气相许的许

扫码关注云+社区

领取腾讯云代金券