前言:网上看了几篇关于python实现aes加密的文章,其中Crypto之类的库安装之后里面根本没有Cipher模块(from Crypto.Cipher import AES),翻了其它人的文章才知道,Crypto其实已经停止维护了。所以不要去装crypto,应该装pycryptodome。以下是我的环境:
python 版本:3.6.5
pip版本:21.1.3(如果版本低可以升级python3 -m pip install --upgrade pip 。注:我的电脑装载Python2和3两个环境,至于怎么让两个环境共存以后会介绍)
安装依赖库:pycryptodome
cmd执行:pip install pycryptodome

image.png
我的网络环境有点差,不过不要放弃,多试几次就好了。如果浪费的时间太多,就考虑pypi手动下载安装了,因为手动通过下载工具下载有断点续传的方式。 还好这次没有这么麻烦。环境搭建好了下面说实现:
#! /user/bin/evn python
# coding:utf-8
__author__ = 'julian'
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
def encryptedContent(data,key='abcdefghijklmnop'):
'''
key 表示密钥
data 表示要加密的字符串
ufr-8 转码的原因是python3默认字符类型是unicode
mode 是加密类型
pad 是补位长度和类型
最后输出base64密文
strip 去除回车
'''
key = key.encode('utf-8')
data = data.encode('utf-8')
data = base64.encodebytes(AES.new(key=key,mode=AES.MODE_ECB).encrypt(pad(data,16,style='pkcs7')))
return data.decode('utf-8').strip()
print(encryptedContent('15400000000'))
print(encryptedContent('123456','soxkfuwjsjshxjfk'))
执行结果:
DBOrr5w0TI9eYlld5vGm3w==
I1b7CxtzsT6jSBcPMF1/2Q==
通过对比开发人员的代码,以及在线AES加密网站的算法,实现结果一致。可应用于接口参数处理。
AES的实际应用,主要在于约定。密钥,补位倍数,加密类型均需要约定。
比如有位移,甚至有可能最后的加密结果增加一层倒序排列,或者增加干扰字符,比如增加另外一个加密串放在前面,
参数到了后端,从第n位之后截取下来进行参数解码。