Python-SecureHTTP,C/S 架构的加密通信库。
说在前面:
在HTTP协议中,传输数据是明文,被第三方截获后很容易看出数据,所以现在主流建议是HTTPS加密传输,如Chrome,新版本用HTTP会提示不安全。
除此之外,我们也可以约定一种或多种加密算法对传输的数据在客户端加密、服务端解密,并且使用签名,这样第三方截获,也无法获取数据明文,且防篡改,大大增加传输安全性。
软件内容:
通过使用RSA+AES让HTTP传输更加安全,即C/S架构的加密通信!
加密算法:
Python-SecureHTTP使用的加密算法相关如下,使用相同标准,其他语言如Java、PHP、Go、JS等均可通信。
1. AES加解密::
模式:CBC
密钥长度:128位
密钥key和初始偏移向量iv一致
补码方式:PKCS5Padding
加密结果编码方式:十六进制
2. RSA加解密::
算法:RSA
填充:RSA_PKCS1_PADDING
密钥格式:符合PKCS#1规范,密钥对采用PEM形式
3. 签名::
对请求参数或数据添加公共参数后排序再使用MD5签名。
更多了解可以参考https://www.jianshu.com/p/b092b4fac27c,上面包的实现逻辑参考此文。
安装使用:
1. 安装:pip install Python-SecureHTTP
2. 逻辑:
客户端上传数据加密 ==> 服务端获取数据解密 ==> 服务端返回数据加密 ==> 客户端获取数据解密 NO.1 客户端上传数据加密流程:: 1. 客户端随机产生一个16位的字符串,用以之后AES加密的秘钥,AESKey。 2. 使用RSA对AESKey进行公钥加密,RSAKey。 3. 参数加签,规则是:对所有请求或提交的字典参数按key做升序排列并用"参数名=参数值&"形式连接。 4. 将明文的要上传的数据包(字典/Map)转为Json字符串,使用AESKey加密,得到JsonAESEncryptedData。 5. 封装为{key : RSAKey, value : JsonAESEncryptedData}的字典上传服务器,服务器只需要通过key和value,然后解析,获取数据即可。 NO.2 服务端获取数据解密流程:: 1. 获取到RSAKey后用服务器私钥解密,获取到AESKey 2. 获取到JsonAESEncriptedData,使用AESKey解密,得到明文的客户端上传上来的数据。 3. 验签 4. 返回明文数据 NO.3 服务端返回数据加密流程:: 1. 将要返回给客户端的数据(字典/Map)进行加签并将签名附属到数据中 2. 上一步得到的数据转成Json字符串,用AESKey加密处理,记为AESEncryptedResponseData 3. 封装数据{data : AESEncryptedResponseData}的形式返回给客户端 NO.4 客户端获取数据解密流程:: 1. 客户端获取到数据后通过key为data得到服务器返回的已经加密的数据AESEncryptedResponseData 2. 对AESEncryptedResponseData使用AESKey进行解密,得到明文服务器返回的数据。
3. 调用:
Python-SecureHTTP提供两个核心类,EncryptedCommunicationClient
(针对逻辑NO.1、NO.4)和EncryptedCommunicationServer
(针对逻辑NO.2、NO.3)。
4. 核心类说明:
4.1 EncryptedCommunicationClient:客户端加密通信类,提供clientEncrypt(NO.1加密)、clientDecrypt(NO4解密)两个方法。
4.2 EncryptedCommunicationServer:服务端加密通信类,提供serverDecrypt(NO.2解密)、serverEncrypt(NO.3加密)两个方法。
4.3 更多API文档,请访问https://python-securehttp.readthedocs.io/#api-documentation
示例代码:
1. 不同语言的AES加密的示例:https://gitee.com/staugur/Python-SecureHTTP/tree/master/examples/AES-CBC-PKCS5Padding
2. 不同语言的RSA加密的示例:https://gitee.com/staugur/Python-SecureHTTP/tree/master/examples/RSA-PKCS1-PEM
3. 不同语言的MD5签名的示例:还没有找
4. 不同语言的HMAC-SHA256的示例(暂时没用此算法作签名):https://gitee.com/staugur/Python-SecureHTTP/tree/master/examples/HMAC-SHA256
5. B/S示例:https://gitee.com/staugur/Python-SecureHTTP/tree/master/examples/BS-RSA
说在后面:
!欢迎提交PR、Issue
ubuntu16.04などでpython3.6を入れるときに ppa:jonathonf/python-3.6 のppaを使っていたんですが、非公開になってしまってちょっと困ったのでメモ 変更前 sudo add-apt-repository ppa:jonathonf/python-3.6 sudo apt update sudo apt install python3.6 apt updat
一、Pyhon-tuf 1.github link 向该Pyhton-tuf的repo server上传包不会持久化保存到本地,是个demo级别的demo。 二、安装方法 1.下载Python-tuf git clone git@github.com:theupdateframework/python-tuf.git 2.使用python 的virtualenv环境,这样不会污染我们的OS环境
http://www.shsay.com UserWarning: /home/server/.python-eggs is writable by group/others and vulnerable to attack when used with get_resource_filename. Consider a more secure location (set with .set_
我正在尝试使用请求模块下载PDF文件,代码如下: import requests url = "" r = requests.get(url, stream=True, timeout=(60, 120), headers={'Connection': 'keep-alive','User-Agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537
python - requests 发送带文件请求 Max.Bai 2017-08 1. requests发送文件功能 Requests 使得上传多部分编码文件变得很简单 >>> url = 'http://httpbin.org/post' >>> files = {'file': open('report.xls', 'rb')} >>> r = requests.post(url, file
#代码示例,仅仅是为了测试request的属性值 @app.route('/login', methods = ['GET','POST']) def login(): if request.method == 'POST': if request.form['username'] == request.form['password']: retur
文件拓展名 Content-Type .* = application/octet-stream .001 = application/x-001 ".301" = "application/x-301" ".323" = "text/h323" ".906" = "application/x-906" ".907" = "drawing/90
[root@jenkins-master bin]# ./pip3 install python3-jenkins -i http://pypi.mirrors.ustc.edu.cn/simple/ Looking in indexes: http://pypi.mirrors.ustc.edu.cn/simple/ Collecting python3-jenkins WARNING: The
当需要和 Live API系统进行 HTTP 通信时,需要将原始的 Query String 转换为和请求时刻相关的 Hashed Query String 后再通过 GET 方法请求 Live API。为了描述的方便,我们将 Query String 转换为 Hashed Query String 的算法称为 THQS 算法。在描述详细的算法流程之前,我们先介绍一下 Unix 时间戳的概念。 U
问题内容: 我和一个朋友正在使用客户端/服务器- 体系结构进行Java游戏。它运行良好,但是我遇到了问题。我们使用TCP套接字在服务器和客户端之间建立网络。我们的网络协议未加密,只有看管流的人才能阅读。 我们考虑过如何对它应用某种加密技术以隐藏登录信息并防止人们编写自己的客户端。但是,基本的事情,例如增加/减少字节,似乎很容易弄清楚。 用于加密游戏(或至少游戏登录信息)的网络通信的常用方法是什么?
S 框架的核心思想是在 MVC 设计模式的基础上将业务逻辑进行剥离放入 Service 层,让 Controller 层变得更轻以适应不同类型的终端和应用场景。并且支持将 Service 层部署到不同的服务器以适应更加复杂的业务需求和高并发需求,业务规模扩大后可以用Java等语言来开发 Service 逐步替换原有代码,无缝接入到现有系统。 Service 层的出现也让 Model 层变得更轻,M
本文向大家介绍C/S和B/S两种架构的概念、区别和联系,包括了C/S和B/S两种架构的概念、区别和联系的使用技巧和注意事项,需要的朋友参考一下 C/S和B/S,是再普通不过的两种软件架构方式,都可以进行同样的业务处理,甚至也可以用相同的方式实现共同的逻辑。既然如此,为何还要区分彼此呢?那我们就来看看二者的区别和联系。 一、C/S 架构 1、 概念 C/S 架构是一种典型的两层架构,其全程是
本文向大家介绍Zabbix通过PSK共享密钥实现Server和Agent的通信加密,包括了Zabbix通过PSK共享密钥实现Server和Agent的通信加密的使用技巧和注意事项,需要的朋友参考一下 Zabbix版本从3.0之后,开始支持Zabbix server, Zabbix proxy, Zabbix agent, zabbix_sender and zabbix_get之间的通信加密,加密
当需要和 Spark 平台进行 HTTP 通信时,需要将原始的 Query String 转换为和请求时刻相关的 Hashed Query String 后再通过 GET 方法请求 Spark API。为了描述的方便,我们将 Query String 转换为 Hashed Query String 的算法称为 THQS 算法。在描述详细的算法流程之前,我们先介绍一下 Unix 时间戳的概念。Uni
本文向大家介绍python之信息加密题目详解,包括了python之信息加密题目详解的使用技巧和注意事项,需要的朋友参考一下 1.贴题 题目来自PythonTip 信息加密 给你个小写英文字符串a和一个非负数b(0<=b<26), 将a中的每个小写字符替换成字母表中比它大b的字母。这里将字母表的z和a相连,如果超过了z就回到了a。 例如a=”cagy”, b=3, 则输出 :fdjb 2.说明 考察
本文向大家介绍C/S和B/S两种架构区别与优缺点分析,包括了C/S和B/S两种架构区别与优缺点分析的使用技巧和注意事项,需要的朋友参考一下 一、C/S 架构 1、 概念 C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是S