网站建设公司哪家好速找盛世传媒,怎做视频网站,公众号 手机网站开发,wordpress积分插件中文免费看视频讲的更详细#xff1a;https://www.bilibili.com/video/BV1zr4y1E7V5/? 一、对称加密
对称加密算法是共享密钥加密算法#xff0c;在加密解密过程中#xff0c;使用的密钥只有一个。发送和接收双方事先都知道加密的密钥#xff0c;均使用这个密钥对数据进行加密和解… 看视频讲的更详细https://www.bilibili.com/video/BV1zr4y1E7V5/? 一、对称加密
对称加密算法是共享密钥加密算法在加密解密过程中使用的密钥只有一个。发送和接收双方事先都知道加密的密钥均使用这个密钥对数据进行加密和解密。
数据加密在对称加密算法中数据发送方将明文 (原始数据) 和 加密密钥一起经过加密处理生成复杂的密文进行发送。
数据解密数据接收方收到密文后使用加密的密钥及相同算法的逆算法对加密的密文进行解密将使其恢复成可读明文。
二、非对称加密
非对称加密算法有两个密钥一个称为公开密钥 (publickey)另一个称为 私有密钥 (private key)加密和解密使用的是两个不同的密钥所以这种算法称为非对称加密算法。
如果使用公钥对数据进行加密只有用对应的私钥才能进行解密。
如果使用私钥对数据进行加密只有用对应的公钥才能进行解密。
三、常见加密处理方式
根据上述常见的加密算法测试人员在测试不同的加密接口可采用下述的方法处理加密接口 摘要算法MD5.SHA1 造接口数据前调用MD5SHA1进行编码服务端对比编码后的字符串是否一致 对称加密算法AES,DES 造接口数据前从开发获取对称公钥基于对称公钥可以加密请求数据解密响应报文 非对称加密算法RSA造接口数据前从开发获取公钥私钥去加密解密接口数据 用户认证一般的接口测试工具都会提供一个User Auth/Authorization的选项 1、OAuth 2.0认证
在对应的工具上你可以选取对应的用户认证选项如果用Python如何实现用户认证。
首先安装Requests库Requests库的get()和post()方法均提供有auth参数用于设置用户签名。假定我们有一个接口为添加一个新的公告接口需要认证auth(username,password)nid 或 name两个参数二选一伪代码
highlighter- ruby
def test_get_notice_list_nid_sucess(self):auth_user (admin , admin123456)r requests.get(self.base_url, auth auth_user, params {nid : 1})result r.json()self.assertEqual(result[status], 200)
2、数字签名
在使用 HTTP/SOAP 协议传输数据的时候签名作为其中一个参数可以起到关键作用
先来一个简单的通过客户的密钥服务端的密钥匹配
这个很有好理解例如一个接口传参为
highlighter- awk
http://127.0.0.1:8000/api/?a1b2
假设签名的密钥为signpassword
加上签名之后的接口参数为
highlighter- awk
http://127.0.0.1:8000/sign/?a1b2signsignpassword
但是这样的sign 参数明文传输是不安全的,一般会选择一些加密算法比如MD5 算法MD5算法是不可逆向的比如MD5代码如下
highlighter- stylus
import hashlib
md5 hashlib.md5()
sign_str signpassword
sign_bytes_utf8 sign_str.encode()
md5.update(sign_bytes_utf8)
sign_md5 md5.hexdigest()
print(sign_md5)
执行后得到6648e929329e53e7a91c50ae685a88b5
此时带签名的接口为
highlighter- apache
http://127.0.0.1:8000/sign/?a1b2sign6648e929329e53e7a91c50ae685a88b5
所以当服务器接收到请求后同样需要对“signpassword”进行 MD5 加密然后比对与调用者传来的 sign 加密串是否一致从而来鉴别调用者是否有权限使用该接口。
接着我们来理解一个复杂一点的把sign参数传递为api key申请获取 timestramp时间戳同样需要用代码来实现原理和上面这个一致的。伪代码
highlighter- ruby
def setUp(self): self.base_url http://127.0.0.1:8000/api/sec_add_notice/# app_keyself.api_key APIkey# 当前时间now_time time()self.client_time str(now_time).split(.)[0]# signmd5 hashlib.md5()sign_str self.client_time self.api_keysign_bytes_utf8 sign_str.encode(encodingutf-8)md5.update(sign_bytes_utf8)self.sign_md5 md5.hexdigest()
3、AES加解密的过程
通常接口会使用更复杂一点的方式来进行加密的操作常见的是AES的使用放一张图让大家感受一下AES加解密的过程 Python里面有一个很好的黑魔法叫PyCrypto库支持常见的 DES、AES 加密以及 MD5、SHA 各种 HASH 运算。
官方网站下载最新版本
highlighter- awk
https://www.dlitz.net/software/pycrypto/
另外也可以在 PyPi 仓库中下载安装
highlighter- awk
https://pypi.python.org/pypi/pycrypto
对于AES的加密来说看一下用了PyCrypto库的结果
加密
highlighter- stylus
from Crypto.Cipher import AES
obj AES.new(This is a key123, AES.MODE_CBC, This is an IV456)
message The answer is no
ciphertext obj.encrypt(message)
print(ciphertext)
程序运行后的结果为
highlighter- taggerscript
b\xd6\x83\x8dd!VT\x92\xaaA\x05\xe0\x9b\x8b\xf1
AES加密里面有两个关键一个是key必须为16,24,32位一个是VI必须为16位
解密解谜者必须要同时知道key和VI才可以解密
highlighter- stylus
obj2 AES.new(This is a key123, AES.MODE_CBC, This is an IV456)
s obj2.decrypt(ciphertext)
print(s)
由Crypto库的作者已停止维护现推荐安装
highlighter- cmake pip install pycrytodome
pycryptodome官方文档
highlighter- awk
https://www.pycryptodome.org/en/latest/
写在最后 如果你觉得文章还不错请大家 点赞、分享、留言 下因为这将是我持续输出更多优质文章的最强动力 看到这篇文章的人有觉得我的理解有误的地方也欢迎评论和探讨 你也可以加入下方的的群聊去和同行大神交流切磋