写点什么

软件测试 | 接口测试

  • 2023-05-17
    北京
  • 本文字数:1290 字

    阅读完需:约 4 分钟

常用的加密算法有很多种,我所负责测试的接口平台项目主要使用 AES 加密算法,所以对该算法有所了解。

PyCrypto 库

PyCrypto 是一个免费的加密算法库,支持常见的 DES、AES 加密,以及 MD5、SHA 等各种 HASH 运算。

PyPI 仓库地址:https://pypi.python.org/pypi/pycrypto

PyCrypto 在 Windows 系统中安装需要依赖于“vcvarsall.bat”文件,解决办法是安装庞大的 Visual Stuio,或者其他通过繁琐的过程才能安装成功。

PyCrypto 可以做什么?在 PyPI 的下载页面给出了几个简单例子。

1.例一

SHA-256 算法属于密码 SHA-2 系列哈希。它产生了一个消息的 256 位摘要。哈希值用作表示大量数据的固定大小的唯一值。数据的少量更改会在哈希值中产生不可预知的大量更改。

下面通过例子演示 SHA256 模块的使用。

Python 3.5.2(default,Nov 17 2016,17:05:23)[GCC 5.4.0 20160609] on linuxType "help","copyright","credits" or "license" for more information.>>> from Crypto.Hash import SHA256>>> hash = SHA256.new()>>> hash.update(b'message')
#使用digest()方法加密>>> hash.digest()b'\xabS\n\x13\xe4Y\x14\x98+y\xf9\xb7\xe3\xfb\xa9\x94\xcf\xd1\xf3\xf3"\xf7\x1c\xea\xla\xf0+F\x0cm\x1d'
#使用hexdigest()方法加密>>> hash.hexdigest()'ab530a13e45914982b79f9b7e3fba994cfd1f3fb22f71cealafbf02b460cbdld'
复制代码

通过 digest()方法可以对字符串“message”进行加密。当然,通过 hexdigest()方法也可以将其转换为 16 进制的加密字符串。

2.例二

AES 是 Advanced Encryption Standard 的缩写,即高级加密标准,是目前非常流行的加密算法之一。

通过例子演示 AES 算法加密与解密。

>>> from Crypo.Cipher import AES
#加密>>> obj = AES.new('This is a key123',AES.MODE_CEC,'This is an IV456')>>> message = "The answer is no">>> ciphertext = obj.encrypt(message)>>> ciphertextb'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1'
#解密>>> obj2 = AES.new('This is a key123',AES.MODE_CBC,'This is an IV456')>>> obj2.decrypt(ciphertext)b'The answer is no'
复制代码

加密

“This is a key 123”为 key,长度有着严格的要求,必须为 16、24 或 32 位,否则将抛出错误:“ValueError:AES key must be eithre 16,24,or 32bytes long”。

“This is an IV456”为 VI,长度要求更加严格,只能为 16 位。否则将抛出错误:“ValueError: IV must be 16 bytes long”.

通过 encrypt()方法对“message”字符串进行加密得到:b'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1'。

解密

想要对加密字符串进行解密,则必须知道加密时所使用的 key 和 VI。通过 decrypt()方法对加密字符串进行解密得到:b'The answer is no'。

如果 key 和 VI 错误,则将会无法得到正确的解密字符串。例如,把 key 修改为:‘This is a key888’,则加密失败将会得到另一个新的加密字符串:b'xb1\xf7\xc2\x9d\xf7\&\x05\x89\\\xa7\x17\x16\x06\x9b\xf4。

例三

除此之外,PyCryPto 还提供一个强大的随机算法。

>>> from Crypto.Random import random>>> random.choice(['dogs','cats','bears'])'bears'
复制代码

搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | 接口测试_测试_测吧(北京)科技有限公司_InfoQ写作社区