python调用库函数用ecb模式加密图片_AES中ECB模式的加密与解密(Python3.7)

本文主要解决的问题

本文主要是讲解AES加密算法中的ECB模式的加密解密的Python3.7实现。具体AES加密算法的原理这里不做过多介绍,想了解的可以参考文末的参考链接。

主要解决了两个问题:

在Python3.7版本下,所依赖包的安装问题。(有一些博客时间久远,其中所提到的模块并不适用于Python3.7)

因为Python版本的问题,其他博客在基于Python3.6下的代码在Python3.7下并不能运行的问题。

背景介绍

在爬虫项目中遇到,某些网站的账号、密码采用了AES的ECB模式进行了加密。

# 加密前的数据

123456asd

# 加密后的数据

3cfeba82c31b6635e8fb085e04529e74

# 密钥

8NONwyJtHesysWpM

经过测试发现,在AES加密的ECB模式,填充为pkcs7padding ,数据块为128位,输出格式为hex时,得到自己想要的结果。

(这里可以可以根据密文的格式进行判断输出的格式,一般密文以==结尾的输出格式为base64,否则为hex格式)

问题1:Crypto模块安装报错

pip 安装 pycrypto模块,抛如下错误:

error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\cl.exe' failed with exit status 2

解决方法:

问题2:网上copy来的代码报错

在网上博客中直接copy来的代码,可能会抛如下错误。

TypeError: Object type cannot be passed to C code

换个博客,发现依旧是这个错误。

错误原因:

之前版本的代码并不适用于Python3.7。需要进行修改。

修改后的代码:

import base64

from Crypto.Cipher import AES

import binascii

def add_to_16(text):

while len(text) % 16 != 0:

text += '\0'

return text

def encrypt(data, password):

if isinstance(password, str):

password = password.encode('utf8')

bs = AES.block_size

pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)

cipher = AES.new(password, AES.MODE_ECB)

data = cipher.encrypt(pad(data).encode('utf8'))

encrypt_data = binascii.b2a_hex(data) # 输出hex

# encrypt_data = base64.b64encode(data) # 取消注释,输出Base64格式

return encrypt_data.decode('utf8')

def decrypt(decrData, password):

if isinstance(password, str):

password = password.encode('utf8')

cipher = AES.new(password, AES.MODE_ECB)

plain_text = cipher.decrypt(binascii.a2b_hex(decrData))

return plain_text.decode('utf8').rstrip('\0')

if __name__ == '__main__':

data = '123456asd' # 待加密数据

password = '8NONwyJtHesysWpM' # 16,24,32位长的密码(密钥)

password = add_to_16(password)

encrypt_data = encrypt(data, password)

print('加密前数据:{}\n======================='.format(data))

print('加密后的数据:', encrypt_data)

decrypt_data = decrypt(encrypt_data, password)

print('解密后的数据:{}'.format(decrypt_data))

参考

关注公众号西加加先生一起玩转Python。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux跨版本升级,深度Deepin系统支持跨版本升级

很多以前安装有深度Deepin系统的用户提问,我使用的是Deepin 15.4或者是15.5、15.6版本能不能升级到Deepin 15.8,答案是能。深度Deepin系统是支持跨版本升级的,而不限于从Deepin 15.7升级到Deepin 15.8。在控制中心的更新选项中如果有新系统版…

正态分布概率表_三、统计概率思维

一、误差思维(只要有估计,就会有误差)1.误差永远存在,并且不可避免。2.多次测量用平均值的统计方式取得结果,尽量避免偶然因素的影响。二、置信区间(误差范围)1.统计学最核心思想:用…

linux qt sql,linux qt联接sqlserver怎么配置服务器

也可以通过如下代码测试qt5是否支持SqlServer#include #include #include #include int main(int argc, char* argv[]){QApplication app(argc, argv);qDebug() << "Available drivers:";QStringList drivers QSqlDatabase::drivers();foreach(QString driver…

高等数学同济第七版上册电子版_高等数学同济第七版(上册)第一章答案

第一章答案(猴博土高数不挂科视频可以联系公众号获取关于本书&#xff1a;《高等数学(第七版)》是同济大学数学系在第六版的基础上修订的。第七版修订遵循“坚持改革、不断锤炼、打造精品”的要求&#xff0c;对第六版中个别概念的定义&#xff0c;少量定理、公式的证明及定理的…

linux性能记录,Linux性能记录

说到一台Linux服务器的性能&#xff0c;大部分人关注的指标如下&#xff1a;CPU利用率&#xff0c;CPU LOAD&#xff0c;内存利用率&#xff0c;磁盘I/O等待率&#xff0c;网络带宽使用率。Jmeter作为性能测试的强大工具&#xff0c;在其插件JMeterPlugins-Standard和JMeterPlu…

python之路day4_python之路day4

1很多人的努力都是浅尝辄止的2.很多牛逼的人还在努力3.半年会后牛逼的转身冒泡算法&#xff1a;for n in range(1,len(li)):for m in range(len(li) -n) :num1 li[m]num2 li[m1]if num1 > num2:temp li[m]li[m] num2li[m1] tempprint liha 配置思路#!/usr/bin/env pyth…

linux gpu 电脑推荐,System76推出具有RTX GPU更大显示器的Oryx Pro Linux笔记本电脑

美国计算机制造商System76今天推出了更新版的Oryx Pro旗舰Linux笔记本电脑&#xff0c;采用了英特尔和Nvidia的最新技术&#xff0c;以及更大的显示器。Oryx Pro笔记本电脑已经更新了更新的图形和升级组件。继最近更新的System64的“Darter Pro”和“Serval WS”Linux笔记本电脑…

linux 管道 top,linux IPC总结——管道

管道管道是unix ipc的最古老形式&#xff0c;是一种在内存中的特殊文件&#xff0c;只能在具有公共祖先的进程之间使用(即父子进程&#xff0c;兄弟进程)。管道由pipe函数创建#include int pipe(int fd[2])fd[1]写&#xff0c;fd[0]读。单个进程的管道几乎没有任何用处&#xf…

p图软件pⅰc_惊爆软件:王者荣耀P图大神,助力少年国服梦

每天为大家推荐精品软件,实用网站,玩机技巧等。如果出现资源失效或者其他问题可以加官方群聊反馈。喜欢记得点赞关注转发支持下&#xff0c;每天为大家推荐不同的神器&#xff01;01惊爆软件&#xff1a;王者荣耀P图大神&#xff0c;助力少年国服梦【软件名称】王者荣耀P图大神…

linux用u盘上传文件,linux如何挂载U盘和文件系统(或需要用到).doc

linux如何挂载U盘和文件系统(或需要用到)侯狞朔曙据旺顿比属两厩柔办伙鞍靡钢旺家吾琳冤筏哩自蚊械榴革煮疹谐兜拓舀串寸翼醚名镜咽阔听掉屯启挖弯正火个纶恭节锯健腻茁膝溺曼捷嵌肮抽切市佐朱臆梢钮嫡竣陕阵略栏穷雹博咆达健庭傈敷戴粱模摇射袖爆寸井橡窃佐战姑蛔贮俗镣薪肌鼎…

android checkbox监听另一个checkbox选中和不选中_一个真正0基础小白学习前端开发的心路历程...

摘要&#xff1a;真正的0基础小白学习前端开发的心路历程。距离第一阶段的结束敲响了末尾的声音&#xff0c;抱着初心从开始8号的学习到第一阶段的结束这期间要应付期末考试应付自己的各种事情学习时间总是挤出来的这次学习让我受益匪浅呢&#xff1f;废话不多说上干货。一、第…

夏普linux掌上电脑,夏普展示Ubuntu系统NetWalker PC-Z1[图文]

夏普采用Ubuntu系统的NetWalker PC-Z1/图1近日夏普展示了其最新产品采用Ubuntu系统NetWalker PC-Z1 &#xff0c;该产品采用5寸 1024 x600 触摸屏&#xff0c;配备ARM Cortex-A8架构800MHz 飞思卡尔 i.MX515处理器&#xff0c;512MB内存和4GB闪存存储空间(配备SDHC扩展槽&#…

date日期相减 java_一个小小的Java程序

如下是一个Java程序实现了从键盘读入出生日期并计算从出生开始过去了多少天/多少周/多少月/多少日。具体的全部解决思路以及代码。还有代码对应的相关解释已标注与代码中。如果发现有所问题&#xff0c;还望斧正。import java.text.*;import java.util.*;//键盘输入某人的出生日…

C语言里 指针变量强制类型转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...

强制类型转换形式&#xff1a;(类型说明符) (表达式)举例说明&#xff1a;1) int a;a (int)1.9;2)char *b;int *p;p (int *) b; //将b的值强制转换为指向整型数据的指针类型&#xff0c;后赋给p注示&#xff1a;类型说明符和表达式都必须加括号&#xff0c;表达式为单个变量可…

vector 查找结构体对象_面试大厂回来,我狠补了一把算法和数据结构

作者&#xff1a;MageekChiu&#xff0c;主页&#xff1a;http://mageek.cn/链接&#xff1a;https://segmentfault.com/a/1190000009797159本文采用Java语言来进行描述&#xff0c;帮大家好好梳理一下数据结构与算法&#xff0c;在工作和面试中用的上。亦即总结常见的的数据结…

将十进制整数转换成二进制的c语言程序,C语言将十进制数转化为二进制(递归,规定位数)...

/*运用递归算法*/#includevoid B(int n) //定义函数{if (n ! 0){printf("%d",n%2);B(n / 2);}}int main(){int n;printf("Input number:");scanf("%d",&n);printf("输出二进制&#xff1a;");B(n); //在B()函数里打印二进制数…

python runtimeeeror_Python3基础 raise 产生RuntimeError 异常

镇场诗&#xff1a;诚听如来语&#xff0c;顿舍世间名与利。愿做地藏徒&#xff0c;广演是经阎浮提。愿尽吾所学&#xff0c;成就一良心博客。愿诸后来人&#xff0c;重现智慧清净体。——————————————————————————————————————————ex…

c语言借阅管理题目内容描述,C语言 图书借阅管理统 第四组.doc

C语言 图书借阅管理统 第四组实 习 设 计 报 告课程名称 C语言程序设计课题名称 图书借阅管理系统专 业 地理信息系统班 级 0644131学 号姓 名指导教师2014年 6 月 16 日目录一、设计内容与设计要求.....................1二、课题的主要功能.............................1三、…

单片机复位电路电容一定用电解电容_学好单片机必须了解的10个电路

一、单片机上拉电阻的选择大家可以看到复位电路中电阻R110k时RST是高电平 &#xff0c;而当R150时RST为低电平&#xff0c;很明显R110k时是错误的&#xff0c;单片机一直处在复位状态时根本无法工作。出现这样的原因是由于RST引脚内含三极管&#xff0c;即便在截止状态时也会有…

c语言中整形数据分为几进制,c语言中整型数据中的8进制以及16进制数据 – 手机爱问...

2018-01-24▉当a3,b2,c1时&#xff0c;表达式fa>b>c的值是【 】。▉在C语言中&#xff0c;表示逻辑“真”值用【 】。▉C语言提供的三种逻辑运算符是【1】、【2】、【3】。▉若a6,b4,c3&#xff0c;则表达式a&&b c||b-c的值是【 】。▉以下程序的运行结果是 …