文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

AES 加密解密示例(walker)

2023-01-31 08:18

关注

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)

相关链接

  • pypi: pycryptodome , pkcs7
  • gist 示例代码: https://gist.github.com/denni...
  • AES在线加密解密
本文出自 walker snapshot
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯