接口自动化--数据加密之AES

本文介绍了如何使用Python的Crypto库实现AES加密,包括加密和解密的步骤。首先讲解了AES加密的基本原理,如密钥扩展和明文加密,然后提供了Python代码示例,展示了如何对数据进行AES加密和解密。此外,还提到了在接口自动化测试中如何应用AES加密,包括使用PKCS7填充以确保明文长度符合要求。
摘要由CSDN通过智能技术生成

前言:在接口测试中,会遇到加密的请求数据,例如:常用的base64加密,AES加密,在这里,简述用Python转化AES的加密方法

原理
  • 官网链接:https://pycryptodome.readthedocs.io/en/latest/src/cipher/aes.html
  • 在线加密/解密:https://www.sojson.com/encrypt_aes.html
  • AES加密主要包括两个步骤:密钥扩展和明文加密。
    密钥扩展:将输入的密钥(16字节、24字节和32字节)进行扩展,根据密钥长度的不同,得到扩展后的密钥进行加密的轮数也不相同,个人理解为补码。
  •   例如:对用户名进行AES加密,6位的用户名不满足16个字节,就需要补充位数。
    


Python实现:Crypto算法库

算法库详解: https://segmentfault.com/a/1190000016851912

安装
Crypto不是自带的模块,需要下载。http://www.voidspace.org.uk/python/modules.shtml#pycrypto

安装好引用的时候,提示找不到Crypto,找了很多资料,原因是
C:\Python27\Lib\site-packages在这个路径下面有一个文件夹叫做crypto,把它的首字母改成大写,即是Crypto
就没有问题了

简单使用
from Crypto.Cipher import AES 
import base64 
secret = "12345678912345678912345678912345"   #由用户输入的16位或24位或32位长的初始密码字符串 
cipher = AES.new(secret)            #通过AES处理初始密码字符串,并返回cipher对象 
s = cipher.encrypt("1234567891234567")     #输入需要加密的字符串,注意字符串长度要是16的倍数。16,32,48.. 
print s                     #输出加密后的字符串 
print base64.b64encode(s)            #输出加密后的字符串的base64编码。 
print cipher.decrypt(s)             #解密
接口自动化中实现
class AesMethod:
    def __init__(self):
        self.key=key
    def pkcs7padding(self,text):
        """
        明文使用PKCS7填充,如果块长度是16,数据长度9,那么还差7个字节,就在后面补充7个0x07
        数据:  FF FF FF FF FF FF FF FF FF
        填充后:FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07
        最终调用AES加密方法时,传入的是一个byte数组,要求是16的整数倍,因此需要对明文进行处理
        :param text: 待加密内容(明文)
        :return:填充后的数据
        """
        bs = AES.block_size  # 16
        length = len(text)
        bytes_length = len(bytes(text, encoding='utf-8'))
        # tips:utf-8编码时,英文占1个byte,而中文占3个byte
        padding_size = length if(bytes_length == length) else bytes_length
        padding = bs - padding_size % bs
        # tips:chr(padding)看与其它语言的约定,有的会使用'\0'
        padding_text = chr(padding) * padding
        return text + padding_text

    def aes_encrypt(self, data):
        key_bytes=bytes(self.key, encoding='utf-8')
        cipher = AES.new(key_bytes,mode=1)
        # 处理明文
        content_padding = self.pkcs7padding(data)
        # 加密
        encrypt_bytes = cipher.encrypt(bytes(content_padding, encoding='utf-8'))
        # 重新编码
        result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')
        return result

(*****************************************************)(* *)(* Advanced Encryption Standard (AES) *)(* Interface Unit v1.0 *)(* *)(* Readme.txt 自述文档 2004.12.03 *)(* *)(*****************************************************)(* 介绍 *)AES 是一种使用安全码进行信息加密的标准。它支持 128 位、192 位和 256 位长度的密匙。加密算法的实现在 ElAES.pas 单元中。本人将其加密方法封装在 AES.pas 单元中,只需要调用两个标准函数就可以完成字符串的加密和解密。(* 文件列表 *)..Source AES 单元文件..Example 演示程序(* 适用平台 *)这份 Delphi 的执行基于 FIPS 草案标准,并且 AES 原作者已经通过了以下平台的测试: Delphi 4 Delphi 5 C++ Builder 5 Kylix 1本人又重新进行了补充测试,并顺利通过了以下平台: Delphi 6 Delphi 7特别说明: 在 Delphi 3 标准版中进行测试时,因为缺少 Longword 数据类型和 Math.pas 文件,并且不支持 overload 指示字,所以不能正常编译。(* 演示程序 *)这个示例程序演示了如何使用 AES 模块进行字符串的加密和解密过程。(* 使用方法 *)在程序中引用 AES 单元。调用 EncryptString 和 DecryptString 进行字符串的加密和解密。详细参阅 Example 文件夹中的例子。 (* 许可协议 *)您可以随意拷贝、使用和发部这个程序,但是必须保证程序的完整性,包括作者信息、版权信息和说明文档。请勿修改作者和版权信息。 这个程序基于 Mozilla Public License Version 1.1 许可,如果您使用了这个程序,那么就意味着您同意了许可协议中的所有内容。您可以在以下站点获取一个许可协议的副本。 http://www.mozilla.org/MPL/许可协议的发布基于 "AS IS" 基础,详细请阅读该许可协议。Alexander Ionov 是 AES 算法的最初作者,保留所有权利。(* 作者信息 *)ElAES 作者:EldoS, Alexander IonovAES Interface Unit 作者:杨泽晖 (Jorlen Young)您可以通过以下方式与我取得联系。WebSite: http://jorlen.51.net/ http://mycampus.03.com.cn/ http://mycampus.1155.net/ http://mycampus.ecoo.net/ http://mycampus.5500.org/Email: stanley_xfx@163.com
(*****************************************************)(* *)(* Advanced Encryption Standard (AES) *)(* Interface Unit v1.3 *)(* *)(* Readme.txt 自述文档 2004.12.04 *)(* *)(*****************************************************)(* 介绍 *)AES 是一种使用安全码进行信息加密的标准。它支持 128 位、192 位和 256 位的密匙。加密算法的实现在 ElAES.pas 单元中。本人将其加密方法封装在 AES.pas 单元中,只需要调用两个标准函数就可以完成字符串的加密和解密。(* 密匙长度 *)128 位支持长度为 16 个字符192 位支持长度为 24 个字符256 位支持长度为 32 个字符所有加密和解密操作在默认情况下为 128 位密匙。(* 文件列表 *)..Source AES 单元文件..Example 演示程序(* 适用平台 *)这份 Delphi 的执行基于 FIPS 草案标准,并且 AES 原作者已经通过了以下平台的测试: Delphi 4 Delphi 5 C++ Builder 5 Kylix 1本人又重新进行了补充测试,并顺利通过了以下平台: Delphi 6 Delphi 7特别说明: 在 Delphi 3 标准版中进行测试时,因为缺少 Longword 数据类型和 Math.pas 文件,并且不支持 overload 指示字,所以不能正常编译。(* 演示程序 *)这个示例程序演示了如何使用 AES 模块进行字符串的加密和解密过程。(* 使用方法 *)在程序中引用 AES 单元。调用函数 EncryptString 和 DecryptString 进行字符串的加密和解密。调用函数 EncryptStream 和 DecryptStream 进行流的加密和解密。调用过程 EncryptFile 和 DecryptFile 进行文件的加密和解密。详细参阅 Example 文件夹中的例子。(* 许可协议 *)您可以随意拷贝、使用和发部这个程序,但是必须保证程序的完整性,包括作者信息、版权信息和说明文档。请勿修改作者和版权信息。 这个程序基于 Mozilla Public License Version 1.1 许可,如果您使用了这个程序,那么就意味着您同意了许可协议中的所有内容。您可以在以下站点获取一个许可协议的副本。 http://www.mozilla.org/MPL/许可协议的发布基于 "AS IS" 基础,详细请阅读该许可协议。Alexander Ionov 是 AES 算法的最初作者,保留所有权利。(* 作者信息 *)ElAES 作者:EldoS, Alexander IonovAES Interface Unit 作者:杨泽晖 (Jorlen Young)您可以通过以下方式与我取得联系。WebSite: http://jorlen.51.net/ http://mycampus.03.com.cn/ http://mycampus.1155.net/ http://mycampus.ecoo.net/ http://mycampus.5500.org/Email: stanley_xfx@163.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值