游戏中的加密算法
博客专区 > wier 的博客 > 博客详情
游戏中的加密算法
wier 发表于3个月前
游戏中的加密算法
  • 发表于 3个月前
  • 阅读 1142
  • 收藏 38
  • 点赞 2
  • 评论 14
摘要: 游戏的中常见的加密方式介绍,以及优缺点详解

加密主要包含通信数据和存储数据加密,目的都是为了保证其传送和储存的隐秘性,从而保证数据的安全。目前常见的加密方式有对称加密、非对称加密、hash加密、hash加盐加密等,这些在游戏中都会用的,我们会对其用途以及缺陷一一说明,当然了,为了保证其加密算法的安全以及高效,我们也会介绍几种自定义的加密算法,看看加密如何来维护我们的数据安全。

 

1、对称加密

对称加密算法是应用较早的加密算法,技术成熟。主要就是对密钥的一个维护,发送方把数据和密钥通过一定的加密算法处理后,发送给接收方,接受方接到之后在使用相同密钥及算法的逆算法对密文进行解密。这就是一般的对称加密算法过程。常见的对称加密算法有AES、DES3DES,TDEA,BlowfishRC5IDEA等,建议用AES,速度快,安全性也可以。

对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。缺点主要就是密钥需要双方都有,如果密钥被窃取,那么加密就会比第三方破解,特别是游戏中,密钥如果存放在客户端中,容易被破解反编译到。

我们可以采取登陆消息和逻辑消息采用不同的密钥,登陆验证通过之后,服务器为每个用户分配不同的密钥,然后把逻辑密钥传送给客户端,以此保证密钥的不确定性,从而增加游戏的安全。

 

2、非对称加密

非对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。这对于对称加密算法来说,又安全了一步,也是目前https常用的加密方式,公钥可以分配和暴露给所有想要访问的请求者,但密钥一定牢牢的掌握在服务器这边,如此对通信来说,安全性有保证。常用的加密算法,RSA,DSA,ECC。

非对称加密算法,优点就是安全,但缺点就是不够快,比较耗费cpu,如果在游戏中每一次消息都有其加密,对cpu的损耗还是挺高的,所以游戏中一般不用这种加密方式,当然了也看游戏类型,如果对这方面的性能要求不高,安全性要求有很高,采用业务科厚非(那个游戏这么傻啊)。

 

3、hash加密

hash加密,就是常见的使用MD5、SHA1等单向HASH算法保护密码,使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单也高效,因此很多互联网公司都采用这种方式保存用户密码。

但安全性越来越担忧了,因为随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。

 

4、hash 加盐加密

hash加密既然容易被彩虹表破解,那么可以采用加盐、多次HASH等扩展,这样可以在一定程度上增加破解难度。常见的方式也是发送方和接受方,维护一个盐池,加密和解密的时候加上这一段盐池来进行hash。

不过这种算法又回到了对称加密中对密钥的保护问题了,如果盐池泄露,别人依然会破解。

怎么办?有人又想出了,让盐池随机的方式,比如PBKDF2算法,原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。一次密码验证过程进行1000次HASH运算,对服务器来说可能只需要1ms,但对于破解者来说计算成本增加了1000倍,而至少8字节随机盐,更是把建表难度提升了N个数量级,使得大批量的破解密码几乎不可行,该算法也是美国国家标准与技术研究院推荐使用的算法。

 

5、自定义加密

终于到这个了,以上那么多高大上的加密算法,都是业界比较成熟的算法,好处是处处有API支持也有人实现,拿来就用,坏处也是,算法格式规整透明,除了非对称算法,都有其对应的破解方式。游戏的加密要怎样?安全、安全,高效、高效,你不能一个加密算法就耗费我100ms的cpu吧,太浪费了。

我们可以尝试一种动态加密的方式,就是每一次请求保证用不同的密钥,这样即便一个消息被截取破解了,下一次密钥又不一样,如此破解者会比较崩溃。怎么做?我简单说下思想。

每个消息必须有唯一id,一个是防止消息重放,一个可以用来做我们的加密。比如我们初始的时候有一个密码池 A=【1,2,3,4,5】,每次消息从服务器发送出去的时候,消息ID都+1,

当前密钥=A.index(消息ID%A.length),如此就能保证每次密钥不一样,具体拿到密钥如何加密,完全可以用自己的加密方式,比如把二进制一部分截取通过密钥移位操作,或者算法运算都可以。

我们的目的一个保证密钥动态,一个就是保证算法足够高效。

 

算法 特点 有效破解方式 破解难度 其它 算法名字
对称加密 可以解密出明文 获取密钥 需要确保密钥不泄露 AES,3DES
非对称加密 一对钥匙—公钥私钥 获取私钥 效率低,安全性高 RSA,DSA,ECC,DH
HASH加密 简单,高效 碰撞、彩虹表

 

 

MD5,SHA1,SHA1256
加盐HASH 对hash加盐处理 碰撞、彩虹表 需要确保“盐”不泄露 同上
Pbkdf2 对hash的盐池进行随机处理 随机盐池不能太大,8个字节比较合适 同上
自定义算法 非标准,高效,安全 算法的灵活性 动态密钥

 

 

-----------------------------------------------------------------------------

想看更多有趣原创的技术文章,扫描关注公众号。

关注个人成长和游戏研发,推动国内游戏社区的成长与进步。

标签: 加密 算法
共有 人打赏支持
粉丝 512
博文 40
码字总数 105018
评论 (14)
黑狗
说实话 没啥用
前几个能破解你这个就是一样的破解方式
你这个如果破解不了 前几个也破解不了
mawenhan
hash也算是加密?
wier

引用来自“黑狗”的评论

说实话 没啥用
前几个能破解你这个就是一样的破解方式
你这个如果破解不了 前几个也破解不了

回复@黑狗 :讲一下自定义破解方式,目前的游戏项目中还没有破解过
黑狗

引用来自“wier”的评论

引用来自“黑狗”的评论

说实话 没啥用
前几个能破解你这个就是一样的破解方式
你这个如果破解不了 前几个也破解不了

回复@黑狗 :讲一下自定义破解方式,目前的游戏项目中还没有破解过
还没有破解过很正常的呀
我很多小系统现在的加密方式就是MD5 至今还没有被任何人破解过 包括FBI,国安部,萨达姆,比尔盖茨,金正恩等人 都还没有攻破我的堡垒

我相信他们也没有攻破你作的系统 对吧...

题外话绕完了,回归正题
你所说的“自定义”没有任何意义,你所说的“密钥池”也不过就是多个密钥管理而已,和salt没有任何区别,甚至还不如salt,毕竟salt不存在池,是无限多的,所以,同样没有意义
与我争论的之后,希望你可以真正去了解一下“加密” 看看经典的加密的论文

你最后所说的加密算法,并不算加密算法,最多就是“加密方法”

如果感兴趣的话 去查一下 SM2/SM3/SM4 国人自己的加密算法 真正的加密算法是商用的,需要购买的,以后可能你们公司会碰到
wier

引用来自“黑狗”的评论

引用来自“wier”的评论

引用来自“黑狗”的评论

说实话 没啥用
前几个能破解你这个就是一样的破解方式
你这个如果破解不了 前几个也破解不了

回复@黑狗 :讲一下自定义破解方式,目前的游戏项目中还没有破解过
还没有破解过很正常的呀
我很多小系统现在的加密方式就是MD5 至今还没有被任何人破解过 包括FBI,国安部,萨达姆,比尔盖茨,金正恩等人 都还没有攻破我的堡垒

我相信他们也没有攻破你作的系统 对吧...

题外话绕完了,回归正题
你所说的“自定义”没有任何意义,你所说的“密钥池”也不过就是多个密钥管理而已,和salt没有任何区别,甚至还不如salt,毕竟salt不存在池,是无限多的,所以,同样没有意义
与我争论的之后,希望你可以真正去了解一下“加密” 看看经典的加密的论文

你最后所说的加密算法,并不算加密算法,最多就是“加密方法”

如果感兴趣的话 去查一下 SM2/SM3/SM4 国人自己的加密算法 真正的加密算法是商用的,需要购买的,以后可能你们公司会碰到

回复@黑狗 : md5的,在客户端搞到密钥就可以破解,客户端采用逆向注册,或者源码反编译也可以拿到密钥
wier

引用来自“wier”的评论

引用来自“黑狗”的评论

引用来自“wier”的评论

引用来自“黑狗”的评论

说实话 没啥用
前几个能破解你这个就是一样的破解方式
你这个如果破解不了 前几个也破解不了

回复@黑狗 :讲一下自定义破解方式,目前的游戏项目中还没有破解过
还没有破解过很正常的呀
我很多小系统现在的加密方式就是MD5 至今还没有被任何人破解过 包括FBI,国安部,萨达姆,比尔盖茨,金正恩等人 都还没有攻破我的堡垒

我相信他们也没有攻破你作的系统 对吧...

题外话绕完了,回归正题
你所说的“自定义”没有任何意义,你所说的“密钥池”也不过就是多个密钥管理而已,和salt没有任何区别,甚至还不如salt,毕竟salt不存在池,是无限多的,所以,同样没有意义
与我争论的之后,希望你可以真正去了解一下“加密” 看看经典的加密的论文

你最后所说的加密算法,并不算加密算法,最多就是“加密方法”

如果感兴趣的话 去查一下 SM2/SM3/SM4 国人自己的加密算法 真正的加密算法是商用的,需要购买的,以后可能你们公司会碰到

回复@黑狗 : md5的,在客户端搞到密钥就可以破解,客户端采用逆向注册,或者源码反编译也可以拿到密钥

回复@wier : 抱歉,被折叠了,没看到后面说的,先学习了。我这个确实不算加密算法,只能算是方式,算法层面的东西,没用这么简单,不过对开发者来说,用的都是封装好的算法,关于密码算法的创新以及应用,目前有比较好的应用方向么
changnet
1. hash不是一种加密方法
2.我很奇怪你的池是怎么保证不被别人拿到的
3.你这个密钥池是有序的,别人能破解一人,就能破解N个,除了难度稍微加了一点点,没什么意义
4.在游戏中,除了登录时的密码、session、充值之类的需要加密一下。普通消息没必要加密吧
黑狗

引用来自“wier”的评论

引用来自“wier”的评论

引用来自“黑狗”的评论

引用来自“wier”的评论

引用来自“黑狗”的评论

说实话 没啥用
前几个能破解你这个就是一样的破解方式
你这个如果破解不了 前几个也破解不了

回复@黑狗 :讲一下自定义破解方式,目前的游戏项目中还没有破解过
还没有破解过很正常的呀
我很多小系统现在的加密方式就是MD5 至今还没有被任何人破解过 包括FBI,国安部,萨达姆,比尔盖茨,金正恩等人 都还没有攻破我的堡垒

我相信他们也没有攻破你作的系统 对吧...

题外话绕完了,回归正题
你所说的“自定义”没有任何意义,你所说的“密钥池”也不过就是多个密钥管理而已,和salt没有任何区别,甚至还不如salt,毕竟salt不存在池,是无限多的,所以,同样没有意义
与我争论的之后,希望你可以真正去了解一下“加密” 看看经典的加密的论文

你最后所说的加密算法,并不算加密算法,最多就是“加密方法”

如果感兴趣的话 去查一下 SM2/SM3/SM4 国人自己的加密算法 真正的加密算法是商用的,需要购买的,以后可能你们公司会碰到

回复@黑狗 : md5的,在客户端搞到密钥就可以破解,客户端采用逆向注册,或者源码反编译也可以拿到密钥

回复@wier : 抱歉,被折叠了,没看到后面说的,先学习了。我这个确实不算加密算法,只能算是方式,算法层面的东西,没用这么简单,不过对开发者来说,用的都是封装好的算法,关于密码算法的创新以及应用,目前有比较好的应用方向么
算法是非常专业的东西 建议不要放太多的心思上去 可以去了解
如果你要深入到加密算法里面 那么就业的圈子应该很窄
绝大部分公司都会采用通用的加密算法,自己开发的算法,很贵,有一些公司是专门做算法的
还是建议你眼界放到上层一些,关注安全,而不是关注算法
如果确实对算法感兴趣 我觉得还不如去搞机器学习 很多大公司有自己的算法,解决特定的问题 比如,滴滴快车的“猜你去哪”等功能,里面就会用到他们自己的算法 还有很多电商的推荐商品,也应该有些商家有自己的算法和方案清洗数据,挖掘数据 比加密算法有意思
beyondforever68
上社会工程学
12叔
密码学的第一章内容就是讲
没事别瞎j8自定义算法 :smile:
因为你无法保证算法的可靠性.
低效的加密比不加密更危险
梦朝思夕
楼主可能误解了,hash是单向不可逆的散列,在密码学中不算是加密,
wier

引用来自“梦朝思夕”的评论

楼主可能误解了,hash是单向不可逆的散列,在密码学中不算是加密,

回复@梦朝思夕 : 谢谢指正,这篇文章不严谨
blackshow
说了半天跟游戏有啥关系,加密不都这样吗。。。
918382323
APP专业上架资质办理。长期招开发商合作!有意合作可随时来访!
QQ:2248592620
×
wier
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: