即插即用demo系列——RSA验证
2016-09-01 14:27
260 查看
注意:请先自行装好Crypto
http://ljhzzyx.blog.163.com/blog/static/3838031220136592824697/
执行截图:
http://ljhzzyx.blog.163.com/blog/static/3838031220136592824697/
# coding=gbk __author__ = 'linyc' import os import base64 from Crypto.PublicKey import RSA from Crypto.Signature import PKCS1_v1_5 as PKCS from Crypto.Hash import MD5 as HASH #from Crypto.Cipher import ARC4 as RC4 # 组织加密明文形式 支持入参为列表、字典和字符串。列表和字典统一转化为特定格式的字符串 # 如果入参是字典,注意键值排序!网络传输可能会打乱key顺序,导致对应的字符串不同,验证会失败! def _to_content(data, skip_keys): if isinstance(data, dict): ks = data.keys() ks.sort() content = '&'.join([i + '=' + data[i] for i in ks if data[i] and (i not in skip_keys) ]) elif isinstance(data, list): content = '&&&'.join(data) else: content = data if isinstance(content, unicode): content = content.encode('utf-8') return content # 签名验证,即获取sgn,自己再用公钥加密自己收到的内容,比对两个sgn def _transfer_verify(data, sgn, public_signer): verf_skip_keys = {} content = _to_content(data, verf_skip_keys) h = HASH.new(content) sgn = base64.decodestring(sgn) return public_signer.verify(h, sgn) # 签名,即用私钥,将自己要发送的内容加密成sgn def _transfer_sign(data, private_signer): sign_skip_keys = {} content = _to_content(data, sign_skip_keys) h = HASH.new(content) sgn = private_signer.sign(h) return base64.encodestring(sgn).translate(None, ' \r\n') # RSA加密 def _rsaAdd(message): data = message dpath = os.path.dirname(__file__) with open(os.path.join(dpath, 'private_key.pem')) as f: prikey = RSA.importKey(f.read()) private_signer = PKCS.new(prikey) # 生成密文 sgn = _transfer_sign(data, private_signer) return sgn # RSA解密 如果验证通过,返回True def _rsaRelease(sgn, data): dpath = os.path.dirname(__file__) with open(os.path.join(dpath, 'public_key.pem')) as f: pubkey = RSA.importKey(f.read()) public_signer = PKCS.new(pubkey) return _transfer_verify(data, sgn, public_signer) if __name__ == "__main__": data = '需要被验证的发送内容message' sgn = _rsaAdd(data) print sgn ismatch = _rsaRelease(sgn, data) print ismatch
执行截图:
相关文章推荐
- 即插即用demo系列——文本相似度比较
- “偷懒”的表单验证Demo
- RSA加密解密及RSA签名和验证
- Web服务初探:用Demo学Web服务系列(7)——XML的相关知识
- 使用RSA进行注册码验证--c#
- “偷懒”的表单验证Demo
- 首信易支付的RSA公钥验证问题(博屎没解决的问题)
- Web服务初探:用Demo学Web服务系列(8)——Web服务中Soap消息的相关知识
- 1重写MemberProvider系列文章之用户身份验证
- RSA加密解密及RSA签名和验证(转)
- iTextSharp在asp.net 2.0 中的应用(Demo系列)
- Web服务初探:用Demo学Web服务系列(1)——写在学前的话
- “偷懒”的表单验证Demo
- Web服务初探:用Demo学Web服务系列(6)——断开模式访问数据库的Web服务
- Web服务初探:用Demo学Web服务系列(2)——编写一简单的Web服务
- LightningFramework系列(Demo程序数据库设计图)
- “偷懒”的表单验证Demo
- EMF介绍系列(八、模型的验证)
- Web服务初探:用Demo学Web服务系列(9)——用B/S程序调用Web服务
- 基于RSA的数字签名和验证C#源码