更新日期:2024年 12月 20日H5渠道上报角色信息怎么进行加密
<p>
<span style="font-size:14px;">Q: 一些H5渠道要求加密传送角色信息以防止玩家篡改信息<span style="white-space:normal;font-size:14px;">(目前有快快玩H5、X游戏H5、芭芭游H5、七七手游H5、爱奇游H5渠道有此要求</span><span style="white-space:normal;font-size:14px;"></span><span style="white-space:normal;font-size:14px;">)</span>,游戏研发在接入时怎么加密将角色信息上传给QuickSDK呢?</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">A: 游戏可以按如下方式进行加密:</span>
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;">签名拼接串(<span style="color:#E53333;">拼接的参数只需要如下示例里的,不要加别的参数</span>)</span><br />
<br />
<span style="font-size:14px;">$content = "uid=$uid&username=$username&serverId=$serverId&serverName=$serverName&userRoleId=$userRoleId&userRoleName=$userRoleName&userRoleLevel=$userRoleLevel&vipLevel=$vipLevel&gameRolePower=$gameRolePower&key=";</span><span style="white-space:pre;"> </span><br />
<span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">签名KEY</span><br />
<span style="font-size:14px;">$sign_key =CP在QuickSDK后台配置的“<span style="white-space:normal;font-size:14px;">渠道角色签名秘钥</span><span style="white-space:normal;font-size:14px;"></span>”,如下图所示,如果CP配置的值为“abc”,则签名KEY就为<span style="white-space:normal;font-size:14px;">“abc”</span></span>
</p>
<p>
<span style="font-size:14px;"><img src="https://staticsite.quickapi.net/data/newFiles/20221028/20221028101307pc60136.png" alt="" /><br />
</span>
</p>
<p>
<br />
<span style="font-size:14px;">计算签名</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">$sign_result = md5($content . $sign_key);</span><br />
<span style="font-size:14px;">这里的点表示字符串拼接连接</span><br />
<br />
<br />
<span style="font-size:14px;"><span style="font-size:14px;">在角色接口中投递字段名称(<span style="color:#E53333;">传MD5加密后的32位小写值</span>):</span><br />
<span style="font-size:14px;">channel_role_sign = $sign_result</span><br />
<br />
<span style="font-size:14px;">比如你的角色对象是roleInfo</span><br />
<span style="font-size:14px;">那么需要增加roleInfo.channel_role_sign=签名结果</span><br />
<span style="font-size:14px;">最后调用QuickSDK.uploadGameRoleInfo(roleInfo, (res)=>{})</span><br />
</span><span style="font-size:14px;"></span><br />
<span style="font-size:14px;"></span>
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;color:#E53333;">注意:</span>
</p>
<p>
<span style="font-size:14px;color:#E53333;">1. 游戏后端进行加密,加密后还是由</span><span style="font-size:14px;color:#E53333;">前端根据H5对接文档里的角色上报接口来上传角色信息</span>
</p>
<p>
<span style="font-size:14px;color:#E53333;">2. 游戏后端进行加密前,需要先跟游戏前端核对下角色信息是否正确,确认正确才能进行加密,如果核对信息不符就不需要进行加密以及上报。这样便能杜绝玩家篡改角色数据的情况</span>
</p>
<p>
<span style="font-size:14px;color:#E53333;">3. <span style="white-space:normal;color:#E53333;font-size:14px;">如果</span>添加了channel_role_sign后依然能被篡改,那就是玩家在游戏前端首次上报等级时就篡改了信息,从而拿到了预期的sign,然后上报给QuickSDK时,再次篡改,并使用从游戏接口返回的sign,这样就达到了目的。为防止这种情况,需要游戏接口在返回sign时,要再判断下等级或者战力相关数据的合理性</span>
</p>