今天这里讨论的是对称加密中的AES加密(这里)。

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下:图:

关于AES加密算法的更多介绍可以参照: 这里

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现。

1、python 在 Linux下使用AES时要安装的是pycrypto模块,安装方法很简单:

 pip install pycrypto

2、关于CBC加密和ECB加密。

CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)

ECB加密不需要iv(偏移量)

CBC加密:

#!/usr/bin/python
# -*- coding: utf-8 -*-from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hexmykey='fN8WkT2DQJQa7aR0'# 如果text不足16位的倍数就用空格补足为16位
def add_to_16(text):if len(text.encode('utf-8')) % 16:add = 16 - (len(text.encode('utf-8')) % 16)else:add = 0text = text + ('\0' * add)return text.encode('utf-8')# 加密函数
def encrypt(text):key = mykey.encode('utf-8')mode = AES.MODE_CBCiv = b'qqqqqqqqqqqqqqqq'text = add_to_16(text)cryptos = AES.new(key, mode, iv)cipher_text = cryptos.encrypt(text)# 因为AES加密问题,所以这里转为16进制字符串return b2a_hex(cipher_text)# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):#key = '9999999999999999'.encode('utf-8')key = mykey.encode('utf-8')iv = b'qqqqqqqqqqqqqqqq'mode = AES.MODE_CBCcryptos = AES.new(key, mode, iv)plain_text = cryptos.decrypt(a2b_hex(text))return bytes.decode(plain_text).rstrip('\0')mystr="hello world!"if __name__ == '__main__':#e = encrypt("hello world")  # 加密e = encrypt(mystr)  # 加密d = decrypt(e)  # 解密print("加密:", e)print("解密:", d)

ECB加密:

#!/usr/bin/python
# -*- coding: utf-8 -*-from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hexmykey='fN8WkT2DQJQa7aR0'"""
ECB没有偏移量
"""
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hexdef add_to_16(text):if len(text.encode('utf-8')) % 16:add = 16 - (len(text.encode('utf-8')) % 16)else:add = 0text = text + ('\0' * add)return text.encode('utf-8')# 加密函数
def encrypt(text):mykey = '9999999999999999'.encode('utf-8')mode = AES.MODE_ECBtext = add_to_16(text)cryptos = AES.new(mykey, mode)cipher_text = cryptos.encrypt(text)return b2a_hex(cipher_text)# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):mykey = '9999999999999999'.encode('utf-8')mode = AES.MODE_ECBcryptor = AES.new(mykey, mode)plain_text = cryptor.decrypt(a2b_hex(text))return bytes.decode(plain_text).rstrip('\0')mystr = "hello world!"if __name__ == '__main__':e = encrypt(mystr)  # 加密d = decrypt(e)  # 解密print("加密:", e)print("解密:", d)

对称加密之AES算法的python实现相关推荐

  1. 常用对称加密算法之AES算法-CBC模式

    这个需求很简单就是存储数据库密码,因为链接数据库的需要用到,加密就必须要用对称加密算法,于是简单调研了一下对称加密算法,经过对比最后选择了AES算法-CBC模式 怎么理解对称加密 加密:接收秘钥key ...

  2. AES对称加密和解密算法以及Java的AES工具类

    参考资料:百度百科[高级加密标准] AES简介 1.密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块 ...

  3. 对称加密及AES加密算法

    目录 一.对称加密  1.什么是对称加密?  2.对称加密的工作过程  3.对称加密的优点  4.对称加密的两大不足 二.AES加密算法  1.什么是AES加密算法及AES加密算法的形成过程  2.A ...

  4. 在线加密解密网站(对称加密:AES、DES、RC,非对称加密:RSA)

    前两天写AES加密相关代码,学习的同时找到一个在线加密解密的网站,帮助自己快速理解了一下,推荐给学习加密的同学.在线加密网站,一开始接触加密(AES等)可以在这里体验下加密与解密,助于快速理解加密模式 ...

  5. crypto++(cryptopp)加密库aes算法的使用

    整个过程浪费了几个小时,感觉cryptopp库的源码不太友好. 遇到的坑和解决办法记录如下,可能不同环境会有不同的问题: 1.下载官网地址 https://www.cryptopp.com/#down ...

  6. 加密狗+AES算法在QT Windows下的加密简析例程

    目录 一. 前言 二. 相关知识 三.效果展示 四.加密解密流程 五.主要函数解析 六.源码/相关包 ​ 一. 前言 本例主要简析加密狗加密解密的过程,结合实体加密狗和AES加密算法,提供QT Win ...

  7. python加密解密算法_DES的加密与解密算法(Python实现)

    1 MaxTime = 16 2 #IP置换表 3 IP_table=[58, 50, 42, 34, 26, 18, 10, 2,4 60, 52, 44, 36, 28, 20, 12, 4,5 ...

  8. 对称加密、非对称加密、DES、AES、RSA、OpenSSL、数字签名、防篡改

    本公众号分享的所有技术仅用于学习交流,请勿用于其他非法活动,如果错漏,欢迎留言指正 <加密与解密>第4版 加解密 安全领域的重要分支和基础设施 互联网重要数据的传输需要加解密 TCP/IP ...

  9. 对称加密----AES和DES加密、解密

    目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA 调用AES/DES加密算法包最精要的就是下面两句话: Cipher cipher = Cipher.get ...

  10. 编写ATL工程实现ActiveX控件调用cryptoAPI接口(三)------------AES对称加密与解密

    注:下面的代码中用了Map,Base64,log,Result等都为自定义类型,太长就不一一贴出. [cpp]  view plain  copy  print ? /* * * * 文件名称:Enc ...

最新文章

  1. python如何启动前端_python- 前端进阶
  2. ElementUI中的el-table怎样实现多选与单选
  3. [云炬创业基础笔记]第十一章创业计划书测试6
  4. 【译】A Beginner-Friendly Introduction to Containers, VMs and Docker
  5. AngularJs学习笔记--E2E Testing
  6. lambda表达式 java 效率_Java8新特性效率之Lambda
  7. hive double 转decimal_大白话详解大数据hive知识点,老刘真的很用心(3)
  8. linux下文件系统创建
  9. 无人车研发实力哪家强?Google只能排第十
  10. word中带圈字符字体显示大小和位置不正常
  11. Sentaurus TCAD Inspect
  12. 滑窗口统计基因组GC含量的分布
  13. 能源之星评级对数据中心IT设备的影响
  14. 机器学习——PCA(主成分分析)与人脸识别
  15. Tyvj P1288 飘飘乎居士取能量块
  16. (predicted == labels).sum().item()
  17. MySQL create database 新建utf-8/utf8mb4编码 数据库
  18. SpringBoot+海康威视摄像头实现在前端的预览
  19. linux登录pg数据库命令,PostgreSQL数据库pg_dump命令行不输入密码的方法
  20. 全球及中国多晶透明陶瓷行业供需及竞争形势分析报告2021~2026年

热门文章

  1. mysql win7 zip_win7 下zip版mysql安装
  2. 华数机器人编程语言_招新 | 海大最「酷」的科创团队,确定不来了解一下吗?...
  3. MySQL — 使用命令创建数据库、链接数据库、创建表、查询表数、删除表
  4. Python实用笔记 (27)面向对象高级编程——使用枚举类
  5. 【tyvj】【dp】回文词(IOI2000)
  6. Angucomplete —— AngularJS 自动完成输入框
  7. HTML 5 新标签
  8. FormBorderStyle 枚举
  9. datagrid数据导出到excel文件给客户端下载的几种方法(转)
  10. HCIE-Security Day1:防火墙概述、实验环境搭建、三种方式管理防火墙