哈希值+非对称加密+网络+数字签名,你真的知道怎么给游戏充钱吗

前文
使用socket实现局域网不同主机通信
SHA256算法的实现和消息的哈希散列值计算
python实现RSA算法,对数据进行加密认证

文章目录

  • 数字签名与认证
  • 攻击类型
  • 算法选择
  • 实现流程
  • 总结


数字签名与认证

什么是数字签名?

  签名我们大家都知道,A在纸上签上自己的名字,其余人在纸上看到A的签名,确认是A的字迹,那么就可以确定这个签名是A留下的。
  但是如何确保这是A本人签上去的而不是第三方伪造的呢?
  这要依赖于A的习惯和字迹是有鲜明特征,与他人不同的。可在经过反复训练后,第三方仍然可以模仿A的字迹进行签名。
  数字签名同样是代表A身份的一个签名,但是由于数据量的庞大,第三方几乎不可能(或者说短时间内不可能)伪造出A的签名,这在一定程度上比我们一般知道的手写签名要安全、可靠。

加密和解密
  在密码学中,我们有一套加密方法,与之对应有一套解密方法,发送方使用加密方法对信息(称作明文)加密,加密后的信息形成密文,将密文暴露在公共环境下,任何人都可以有机会获得这条密文。但是加密后的密文与明文几乎没有关联,没有经过授权的人无法解读密文的内容,而授权用户对密文进行解密,得到明文(原文),才能读懂信息。

认证
  上述已经了解到什么是解密和解密,但是在这个过程中,发送方无法确定接收方能否接收到信息并解密。接收方也无法确定消息是否真的是发送方发送,而不是第三方伪造。
  也就是说,发送方可以抵赖发送这条消息的真实性,接收方无法确认这条消息是否被主动攻击过(伪造、篡改)。
  或许你已经想到,有一个可靠的第三方来确认双方的身份和消息的安全,但这也不是绝对安全,因为问题转到了如何确认可靠的第三方是否可靠上面。
  现在介绍一种方法:先将要发送的消息M经过不可逆的运算变成H。确保在得到H后,无法反推出原文M;确保每一个原文M,都只对应唯一一个H,当原文发生任何改变后,得到的H都完全不一样。随后,发送方使用自己的签名方法对H进行加密形成密文C。原文M和密文C一起发送给接收方。接收方接收到M和C,使用同样的不可逆算法计算M得到H,再对C使用与发送方签名方法相对应的解密方法进行解密,得到D,对比D和H,如果D和H一样,则认证成功。
  在这个过程中,这条消息无法被修改,因为任何一点的改动都会导致产生很大差别的H。同时,发送方无法抵赖他发送过这条消息的存在性,因为H唯一而且只有发送方才能对H签名成C,C也是不可修改的,接收方收到的C解密后与H一致。

  那么这和游戏充值有什么关系呢?不难发现,网络支付都需要这种手段去认证支付记录。假设A要想B发起一笔交易,B想要认证这笔交易的完整性和这笔交易确实是A发起的,就需要上述签名认证技术。

攻击类型

  如果第三方要伪造信息和签名方法,需要找到一条和发送方发送的信息不一样,但是经过不可逆算法计算出来的H一样。或者根据已知的发送信息M和H签名后的C,逆推出发送方使用的签名方法。

算法选择

  计算消息的唯一对应值,可以说是信息摘要,可以使用的是MD5、DES、SHA等算法,但是这些算法不是绝对可靠的,表现在他们会发生碰撞(两个不同的消息得到相同的信息摘要)。对摘要进行加密,可以使用RSA和ECC。
  在本文实现中采用SHA256和RSA方法,前文链接SHA、RSA。同时,我们要模拟发送方和接收方在网络上进行数据的传输,使用到网络连接的方法。

实现流程

  首先需要模拟一个发送方和一个接收方,它们在网上进行在线支付,那就使用网络连接协议,创建一个游戏官方服务器和一个终端玩家。
  当玩家在游戏内点击充值时,游戏的服务器给玩家发送这样的请求:你给我支付648人民币,我给你时装道具。游戏官方确认这笔交易并对它进行签名,发送给玩家。玩家接收到后,确认这笔交易的完整,确认发起方是游戏官方,才进行交易的下一步。
  在服务器端,服务器对交易的内容实验SHA256计算散列值,根据RSA算法使用自己的秘钥对散列值签名,将交易和签名后的数据拼接在一起回送给玩家。
  玩家接收到回送数据后,检验该数据是否正确,如果服务器的身份合法,则进行后续操作。

服务器端:

def udpServer(address,port=8686):# dgram代表udp方式server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server.bind((address, port))print('Server start')while True:data, ad = server.recvfrom(1024)# 处理接收到的数据print('receive from : ', ad, ' data: ', data)ret = serverProcess(data)print('send back: ',ret)server.sendto(ret,ad)c = [chr(data[i]) for i in range(5)]if ''.join(c) == 'close':breakserver.close()print('Server close')def serverProcess(msg):msg = msg.decode('gbk')ret = ''if msg == '充钱!648块钱':deal = '你给我648块我就给你道具'bt = deal.encode('gbk')bt = byte2str(bt)ret += 'charge'l = len(bt)if len(str(l)) < 8:l = '0'*(8-len(str(l))) + str(l)else:l = str(l)ret += l + bthash_index = int(mySHA256(bt),16)e = n = 0with open('e.txt', 'r') as f:e = int(f.read())with open('n.txt', 'r') as f:n = int(f.read())c = quickPowerMod(hash_index,e,n)ret += str(c)return ret.encode('utf-8')if __name__ == "__main__":address = "localhost"port = 8686udpServer(address,port)

玩家端

def process(msg):msg = msg.decode('utf-8')if msg[:6] == 'charge':deal_len = int(msg[6:14])deal = msg[14:deal_len+14]print('deal detail: ', str2byte(deal).decode('gbk'))c = int(msg[deal_len+14:])cal_index = mySHA256(deal)with open('d.txt', 'r') as f:d = int(f.read())with open('n.txt', 'r') as f:n = int(f.read())de_index = quickPowerMod(c,d,n)de_index = hex(de_index)[2:]print('计算的哈希值: ',cal_index)print('解密的哈希值: ', de_index)if de_index == cal_index:print('是合法的官方')else:print('非法数据')if __name__ == '__main__':address = 'localhost'port = 8686message = '充钱!648块钱'bt = message.encode('gbk')receive = udpSend(address, port, bt)process(receive)

玩家端结果
支付认证结果


总结

使用了SHA、RSA和SOCKET实现网络支付的一般流程,不足之处是欠缺许多功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2017 年脑机接口研发热点回眸

来源&#xff1a;科技导报概要&#xff1a;脑机接口&#xff08;brain-computer interface&#xff0c;BCI&#xff09;通过解码人类思维活动过程中的脑神经活动信息&#xff0c;构建大脑与外部世界的直接信息传输通路&#xff0c;在神经假体、神经反馈训练、脑状态监测等领域有…

地牢房间迷宫走廊生成(二),Python实现洪水法、完美迷宫

文章目录前言1 随机房间和房门2 生成走廊2.1生成迷宫2.4 使用循环改进2.3 走廊缩减2.3 走廊再简化总结前言 前面通过随机房间、房门&#xff0c;对房门寻路生成走廊。由于使用A星算法&#xff0c;寻到的是最短路径&#xff0c;这样生成的走廊过直和简单。如果需要生成弯曲的走廊…

Introduce Parameter Object(引入参数对象)

某些参数总是很自然地同时出现 重构&#xff1a;以一个对象取代这些参数

深度解析,马斯克最新发射的先进火箭

来源&#xff1a;环球时报概要&#xff1a;就在几个小时前&#xff0c;美国人成功发射了目前全世界运载能力最强的超级火箭——“猎鹰重型”。就在几个小时前&#xff0c;美国人成功发射了目前全世界运载能力最强的超级火箭——“猎鹰重型”。虽然中芯级火箭在回收过程中坠毁&a…

技术专栏 | 两万字深度长文!从原理到趋势 解剖风口上的区块链技术

来源&#xff1a;芯师爷概要&#xff1a;区块链不是一项新技术&#xff0c;而是一个新的技术组合。其关键技术包括P2P动态组网、基于密码学的共享账本、共识机制、智能合约等技术。区块链不是一项新技术&#xff0c;而是一个新的技术组合。其关键技术包括P2P动态组网、基于密码…

Python 进阶

​Python 进阶&#xff1a;https://eastlakeside.gitbook.io/interpy-zh/ Python 经典教程 专题 系列&#xff1a;https://www.jb51.net/Special/520.htm Python 黑魔法指南&#xff1a;https://magic.iswbm.com/ Python 中文指南&#xff1a;https://python.iswbm.com/ Python…

2018年中国65家机器人产业园布局与规划汇总盘点

来源&#xff1a;机器人创新生态概要&#xff1a;“机器人换人”大潮下&#xff0c;中国已连续两年坐上世界机器人最大消费国的宝座&#xff0c;根据国际机器人联合会&#xff08;IFR&#xff09;发布的数据&#xff0c;2016年中国工业机器人的销量为9万台&#xff0c;同比增长…

人工智能与经济学:关于近期文献的一个综述

来源&#xff1a;财新网概要&#xff1a;相比于之前的历次技术进步&#xff0c;“人工智能革命”所引发的冲击更为巨大&#xff0c;其对经济学造成的影响也将更为广泛和深远。人工智能技术的突飞猛进&#xff0c;对经济社会的各个领域都产生了重大影响&#xff0c;这种影响当然…

Pull Up Field(字段上移)

两个子类拥有形同的字段 重构&#xff1a;将该字段移至超类

DeepMind推出分布式深度强化学习架构IMPALA,让一个Agent学会多种技能

维金 编译自 DeepMind Blog量子位 出品 | 公众号 QbitAI目前&#xff0c;深度增强学习&#xff08;DeepRL&#xff09;技术在多种任务中都大获成功&#xff0c;无论是机器人的持续控制问题&#xff0c;还是掌握围棋和雅达利的电子游戏。不过&#xff0c;这些方面的进展仅限于孤…

AAAI2018正式落幕 13个世界顶尖AI教授都讲了啥?

来源&#xff1a;智东西概要&#xff1a;2月8日消息&#xff0c;第32届AAAI大会在美国新奥尔良正式闭幕。2月8日消息&#xff0c;第32届AAAI大会在美国新奥尔良正式闭幕。本次大会不仅颁发了最佳论文奖、最佳学生论文奖、经典论文将等一系列奖项。作为顶级学术会议之一&#xf…

Linux 中 VIM 的使用

Vim 官网&#xff1a;http://www.vim.org/ VIM 实用技巧&#xff1a;https://wenku.baidu.com/view/21c5f387d4d8d15abe234ecb.html vim 的一些小技巧&#xff1a;https://www.douban.com/group/topic/1815089 vim 简单实用的技巧总结&#xff1a;http://www.tuicool.com/arti…

Pull Up Method(函数上移)

有些函数&#xff0c;在各个子类中产生完全相同的结果 重构&#xff1a;将该函数移至超类

重磅 | 中国工程院提出新一代智能制造【附下载】

来源&#xff1a;走向智能论坛近日&#xff0c;中国工程院院刊《Engineering》推出最新观点性文章“走向新一代智能制造”&#xff0c;作者周济、李培根、周艳红等&#xff0c;文章指出智能制造是一个不断演进发展的大概念&#xff0c;可归纳为三个基本范式&#xff1a;数字化制…

Python 装饰器 函数

Python装饰器学习&#xff08;九步入门&#xff09;&#xff1a;http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 浅谈Python装饰器&#xff1a;https://blog.csdn.net/mdl13412/article/details/22608283 Python装饰器与面向切面编程&#xff1a;http://www.cn…

Homepod评测:一款音质超棒但低智商的音箱

来源&#xff1a;The Verge今天&#xff0c;让我们再近距离看看Homepod这款明星产品吧。Homepod拥有卓越的音质HomePod的电源线内置并包裹在面料中&#xff0c;顶部有LED背光音量按钮和一个“显示屏”。之所以打引号是因为它不是真正意义上的显示屏&#xff0c;而是一块LED。它…

Python 生成器 和 yield 关键字

Python 中 yield 的作用&#xff1a;http://youchen.me/2017/02/10/Python-What-does-yield-do/# Python 生成器详解&#xff1a;http://codingpy.com/article/python-generator-notes-by-kissg/#generator Python yield与实现&#xff1a;http://www.cnblogs.com/coder2012/p/…

Extract Subclass(提炼子类)

类中的某些特性只被某些实例用到 重构&#xff1a;新建一个子类&#xff0c;将一部分特性搬移到子类中

从上市公司数据读懂我国新兴产业发展态势

来源&#xff1a;新软件 ccidsaism在全球新一轮科技革命和产业变革中&#xff0c;大数据、物联网、区块链、量子通信、人工智能、机器人、可穿戴设备、新材料等新兴领域展现出巨大的发展潜力&#xff0c;极有可能对未来产业格局和市场产生决定性影响。这些领域的上市公司已成为…

JavaScript,等比例缩放图片的函数,很好用。

在Web上显示图片&#xff0c;通常都会有图片显示比例问题&#xff0c;如果不给<img />限制width和height&#xff0c;那么如果图片大了就会将整个页面挤乱&#xff0c;图片小了又会使图片失真。我的需求如下&#xff1a;1、预先定义好图片显示的标准宽度和高度。2、如果图…