AES加密方式有五种:ECB, CBC, CTR, CFB, OFB

从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现

python 在 Windows下使用AES时要安装的是pycryptodome 模块   pip install pycryptodome

python 在 Linux下使用AES时要安装的是pycrypto模块   pip install pycrypto

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

1. 加密

加密时,明文首先与IV异或,然后将结果进行块加密,得到的输出就是密文,同时本次的输出密文作为下一个块加密的IV。

2. 解密

解密时,先将密文的第一个块进行块解密,然后将结果与IV异或,就能得到明文,同时,本次解密的输入密文作为下一个块解密的IV。

3. 代码:

  

# -*- 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_CBC,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_CBC, 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 = ""
iv = ""
res = AESUtil.encryt("", key, iv)
print res # 2eDiseYiSX62qk/WS/ZDmg==
print AESUtil.decrypt(res, key, iv) #

  

python 实现 AES CBC模式加解密的更多相关文章

  1. python 实现 AES ECB模式加解密

    AES ECB模式加解密使用cryptopp完成AES的ECB模式进行加解密. AES加密数据块分组长度必须为128比特,密钥长度可以是128比特.192比特.256比特中的任意一个.(8比特 == ...

  2. python 实现 DES CBC模式加解密

    # -*- coding=utf-8-*- from Crypto.Cipher import DES import base64 """ des cbc加密算法 pad ...

  3. Java 使用AES/CBC/PKCS7Padding 加解密字符串

    介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充, ...

  4. AES CBC/CTR 加解密原理

    So, lets look at how CBC works first. The following picture shows the encryption when using CBC (in ...

  5. JAVA AES CBC PKCS5Padding加解密

    package com.hzxc.groupactivity.util; /** * Created by hdwang on 2019/1/17. */ import org.slf4j.Logge ...

  6. C++ 和 java 使用 AES CBC 128 加解密

    Java 使用jce, code: import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax ...

  7. 手机号的 AES/CBC/PKCS7Padding 加解密

    前言:接口中上次的手机号码和密码是传入的加密的,模拟自动化的时候也需要先对数据进行加密 1.各种语言实现 网上已经各种语言实现好的AES加密,可以点击查看:http://outofmemory.cn/ ...

  8. openssl:AES CBC PKCS5 加解密 (C/GOLANG)

    #include <openssl/aes.h> /* AES_CBC_PKCS5_Encrypt * 入参: * src:明文 * srcLen:明文长度 * key:密钥 长度只能是1 ...

  9. c++ 基于wincrypt的DES CBC模式加解密

    des.h #pragma once #include <windows.h> #include <atlstr.h> #include <wincrypt.h> ...

随机推荐

  1. PyCharm关闭按两次Shift进入搜索框的功能

    1.按Ctrl + Shift + A 弹出搜索框 2.在弹出的搜索框内输入registry(如果汉化了输入“注册”),回车 3.在弹出的窗口中,往下找到“ide.suppress.double.cl ...

  2. (入门SpringBoot)SpringBoot加接口操作日志好方法(九)

    用Spring的切面去做,慕课网上的大神的小妙招,被我拷贝下来了.import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotati ...

  3. ORA-29861: 域索引标记为 LOADING/FAILED/UNUSABLE

    解决方法:select idx_name,idx_status from ctxsys.ctx_indexes;需要重建同步全文索引:alter index  索引名  rebuild online ...

  4. 【Autoit】Autoit 使用

    一.Autoit 上传文件. 1.常用语法 - WinActivate("title")         聚焦到指定活动窗口 - ControlFocus ( "titl ...

  5. LG5003 跳舞的线 - 乱拐弯 线性DP

    问题描述 LG5003 题解 设 \(mx[i][j][0/1]\)代表当前位置.朝向的最大拐弯数,最小同理. 来源为左边和上边. 坑点:起点可能为#. \(\mathrm{Code}\) #incl ...

  6. python进阶之垃圾回收

    内存使用: 程序在运行的过程需要开辟内存空间,比如创建一个对象需要一片内存空间,定义变量需要内存空间.有内存的开辟,势必也要有内存的释放,不然只进不出那不是貔貅了吗?即使有开辟有释放在短期内还是会有垃 ...

  7. MongoDB创建集合和删除集合05-14学习笔记

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...

  8. Java修饰符作用域

    作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 修饰 ...

  9. 开发常用Git/Linux/idea命令快捷键总结(持续更新)

    在开发过程中,会使用越来越多的命令,或快捷键,来帮助我们提高工作效率.本文记录了我在平时积累的常用命令,分享给大家. git命令 基本命令 set LESSCHARSET=utf-8 --idea T ...

  10. 【干货】SqlServer 总结几种存储过程分页的使用

    就我而言写代码最烦的就是处理数据,其中之一就是分页的使用. 有的代码写多了,总结出一套适用自己的分页方法:有的查一下资料借鉴一下套用起来也达到目的. 那么小编在这里给大家总结几个方法供大家做一下参考. ...