python关于AES加密学习

一、什么是AES加密

https://blog.csdn.net/weixin_40117614/article/details/93018940

一、定义

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。

二、加密方式及参数

1、密钥

密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法解密需要使用同一个密钥
AES支持三种长度的密钥:
128位,192位,256位
俗称:AES128,AES192,AES256

2、填充

要想了解填充的概念,我们先要了解AES分组加密特性
什么是分组加密呢?我们先看下面这张图:
在这里插入图片描述
AES算法在对明文加密的时候,并不是把整个明文都加密成一整段密文,而是把明文拆分成一个独立的明文块,每一个明文块长度128bit
这些明文经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接到一起,就是最终的AES加密结果。
但是这里涉及一个问题:
加入一段明文长度是192bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有192-128=64bit,不足128bit。这时候就需要对明文进行填充(Padding)
填充方式:

1、NoPadding

不做任何填充,但是要求明文必须是16字节的整数倍

2、PKCS5Padding(默认)

如果明文块缺少于16字节(128bit),在明文块末尾补足相应数量的字符,且每个字节的值等于缺少的字符数。
例如:{1,2,3,4,5,a,b,c,d,e}缺少6个字节,则补全为{1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6}

3、ISO10126Padding

如果明文缺少于16字节(128bit),在明文块末尾补足相应数量的字节,最后一个字符值等于缺少的字符数,其他字符填充随机数
例如:{1,2,3,4,5,a,b,c,d,e}缺少6个字节,则补全为{1,2,3,4,5,a,b,c,d,e,5,c,3,G,$,6}

需要注意的是,如果再AES加密的时候使用了某一种填充,解密的时候也必须采用同样的填充方式。

3、模式

AES的工作模式,体现在把明文块加密成密文块的处理过程中。AES加密算法提供了五种不同的工作模式:
ECB、CBC、CTR、CFB、OFB

三、模式讲解

主要讲解一下常用的两种模式ECB和CBC

1、ECB模式

ECB模式是最简单的工作模式,在该模式下,每一个明文块的加密都是完全独立,互不干扰的。
在这里插入图片描述
优点:
1.简单
2.有利于并行计算
缺点:
安全性差

2、CBC模式

CBC模式引入一个新的概念:初始向量IV。用于防止同样的明文块加密成同样的密文块。
在这里插入图片描述
从图中可以看出,CBC模式在每一个明文块加密前会让明文块和一个值先做异或操作。IV作为初始化变量,参与第一个明文块的异或,后续的每一个明文和它前一个明文块所加密出的密文块相异或。这样下来,相同的明文块加密出的密文块显然是不一样的
优点:
安全性高
缺点:
无法并行计算,性能不如ECB
引入初始化向量IV,增加复杂度

二、python爬虫实战

目标网址

实现对目标网页的登入

1、查找加密位置

F12抓包,然后调试,找到加密的位置
在这里插入图片描述
通过调试发现:
word:账号/密码
LoginPK.cmsPK():‘ailk!QAZ@#$)IY&^’
mode是之前说过的模式
padding是之前说的填充方式
然后return加密后的结果

2、node.js执行文件

1、安装node.js

检查安装是否成功:
node -v
npm -v

2、安装crypto-js

npm isntall crypto-js(和python的pip install XXXX一样)

3、在node中测试加密函数

将加密函数中的密钥直接用值,便于测试

var CryptoJS = require("crypto-js");#导入加密模块
encrypt = function(word) {
		var key = CryptoJS.enc.Utf8.parse('ailk!QAZ@#$)IY&^');
		var srcs = CryptoJS.enc.Utf8.parse(word);
		var encrypted = CryptoJS.AES.encrypt(srcs, key, {
			mode: CryptoJS.mode.ECB,
			padding: CryptoJS.pad.Pkcs7
		});
		return encrypted.toString();
};

在这里插入图片描述
测试完成!
之后就是使用python去调用这个js文件就行了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值