1 Star 0 Fork 4

remonde / RSA_AES_Restful

forked from yanghui / RSA_AES_Restful 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

#RSA_AES_Restful restful API 是无的状态的,要保证安全就每次都需要发送验证身份, 所以用网页cookie+session的不行,要用app提交的明文username和请求的url+GUID , url和guid要经过与服务器一样的对称加密算法用password加密;服务器接收到包后, 根据username查询数据库里的密码, 用密码和对称的解密算法对(url+GUID)解密, 得到了GUID服务器在全局的集合里找是否存在GUID 如果存在, 则验证不通过,不存在则加入集合并通过验证。如果找不到用户,或者解密错误,都被认为是验证不通过

生成公钥私钥对过程: 生成私钥:openssl genrsa -out rsa_private_key.pem 1024 根据私钥生成公钥: openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout 这时候的私钥还不能直接被使用,需要进行PKCS#8编码: openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt 命令中指明了输入私钥文件为rsa_private_key.pem,输出私钥文件为pkcs8_rsa_private_key.pem,不采用任何二次加密(-nocrypt)

加解密过程: 1、将需要的参数mes取出key排序后取出value拼成字符串signdata 2、用signdata对商户私钥进行rsa签名,生成签名signn,并转base64格式 3、将签名signn插入到mes的最后生成新的data 4、用encryptkey16位常量对data进行AES加密后转BASE64,生成机密后的data 5、用对方公钥publickey对encryptkey16位常量进行RSA加密BASE64编码,生成加密后的encryptkey 6、将merchantaccount,第四部加密后的data,第五步加密后的encryptkey作为参数post请求给URL http://xxxx/xxx/api/xxx/xxx/xxx/xxx 7、返回的结果json传给data和encryptkey两部分,都为加密后的 8、用商户私钥对encryptkey进行RSA解密,生成解密后的encryptkey。参考方法:rsa_base64_decrypt 9、用解密后的encryptkey对data进行AES解密。参考方法:base64_aes_decrypt

       def requestprocess(self,mesdata):
           values={}
           values['merchantaccount']=Gl.merchantaccount
           encryptkey = '1234567890123456'
           values['GUID']=random(8)
           data=self.aes_base64_encrypt(json.dumps(mesdata),encryptkey) 
           values['data']=data
           values['encryptkey']=self.rsa_base64_encrypt(encryptpassword,Gl.publickey) 
       GUIDS={}
       def result_decrypt(self,result):
           #从数据库中找到password = '1234567890123456'
           account = result['merchantaccount']
           with encryptpassword=db.find.where(username=account).password:
                 encryptkey = self.rsa_base64_encrypt(encryptpassword,Gl.publickey) 
                 if result['encryptkey']==encryptkey:
           		       kdata=result['data']
           		       rdata=self.base64_aes_decrypt(kdata,encryptpassword)
           		       print '解密后的data='+rdata
           		       session_key=result['GUID'] #避免重发攻击
           		       if GUIDS[account]!= session_key:
           		          GUIDS[account]=session_key
           	            return self.success(jsondata)
           	         return self.error()
           return self.error()
The MIT License (MIT) Copyright (c) 2015 cisco08 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

RSA-AES对称加密+GUID对restfulAPI认证 展开 收起
Python
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/remonde/RSA_AES_Restful.git
git@gitee.com:remonde/RSA_AES_Restful.git
remonde
RSA_AES_Restful
RSA_AES_Restful
master

搜索帮助