C/S 架构的加密通信库 Python-SecureHTTP

码农软件 · 软件分类 · 网络工具包 · 2019-02-24 11:58:33

软件介绍

说在前面:

    在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

本文地址:https://codercto.com/soft/d/24.html

Developer's Guide to Social Programming

Developer's Guide to Social Programming

Mark D. Hawker / Addison-Wesley Professional / 2010-8-25 / USD 39.99

In The Developer's Guide to Social Programming, Mark Hawker shows developers how to build applications that integrate with the major social networking sites. Unlike competitive books that focus on a s......一起来看看 《Developer's Guide to Social Programming》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具