华为的SDK在登录时原来的实现思路是:
1、C->SDK-C
2、SDK-C->C
3、C->S
4、S->SDK-S
5、SDK-S->S
6、S->C
新版本中,把步骤4和步骤5省了,官方原文:
游戏可以将gameAuthSign、 playerId、 appId和ts提交到游戏自己的服务器,使用文档附
录一中的公钥进行验签,验签方式如下:
a. 将 appId、 ts 和 playerId 的值进行连接;
b. 将 a 的值使用 SHA256 计算 HASH;
c. 将 b 的值使用公钥采用 RSA 算法进行验签,公钥值请参考本文档的“ 7.1 登录鉴权
签名的验签公钥”。
官方java核心代码:
public static boolean verify(byte[] data, String publicKey, String sign)
throws Exception
{
byte[] keyBytes = Base64Util.decode(publicKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicK = keyFactory.generatePublic(keySpec);
Signature signature = Signature.getInstance("SHA256WithRSA");
signature.initVerify(publicK);
signature.update(data);
return signature.verify(Base64Util.decode(sign));
}
官方php核心代码:(参考http://club.huawei.com/thread-5443470-1-1-2851.html)
$pubKey = @file_get_contents($filename);
$openssl_public_k