public void OnClick() { //TD→access→uuidは[xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]形式に変換すること uuid_input.text = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; checksum_input.text = "000000000"; response_input.text = "{\"header\":{\"code\":4096,\"achievement_new\":null,\"achievement_clear\":null,\"achievement_counter\":null,\"achievement_clear_data\":null,\"achievement_reward_count\":-1,\"achievement_new_count\":-1,\"session_id\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"api_version\":\"5.3.0\",\"packet_unique_id\":000,\"server_time\":1517458101,\"ott\":00000000,\"csum\":\"xxxxxxxxx\"},\"result\":null}"; PacketData packData = new PacketData(); packData.m_PacketAPI = ServerDataDefine.SERVER_API.SERVER_API_USER_AUTHENTICATION; bool bflag = ServerCheckSumUtil.CheckPacketCheckSum(response_input.text, checksum_input.text, packData, uuid_input.text); ServerCheckSumInfo info = ServerCheckSumUtil.check_sum_info.Find((v) => v.packet_unique_num == packData.m_PacketUniqueNum); string ret = ""; if (info != null) { ServerCheckSumUtil.check_sum_info.Remove(info); ret = string.Format("{0}\n local_check_sum = {1} \n server_check_sum = {2}", bflag ? "OK" : "NG", info.local_check_sum, info.server_check_sum); } else { ret = "Not Found CheckSumData"; } #if BUILD_TYPE_DEBUG Debug.Log(ret); #endif Answer.text = ret; }
/*==========================================================================*/ /* func */ /*==========================================================================*/ //---------------------------------------------------------------------------- /*! * @brief セキュリティ用チェックサムの構築 */ //---------------------------------------------------------------------------- static public bool CheckPacketCheckSum(string strRecvPacketJson, string strRecvCheckSum, PacketData packData = null, string Uuid = "") { //-------------------------------- // チェックサムのカラムが入ってない状態でサーバー側はチェックサムを作成している。 // 求める前に文字列を加工して、サーバー側がチェックサムを求めたタイミングと同じフォーマットに変換する //-------------------------------- { { string strCheckSumPosKey = ",\"csum\":"; string strCheckSumSample = ",\"csum\":\"FFFFFFFFF"; int nCheckSumIndex = strRecvPacketJson.IndexOf(strCheckSumPosKey); int nCheckSumIndexAfter = strRecvPacketJson.IndexOf(strCheckSumPosKey) + strCheckSumSample.Length + 1; if (nCheckSumIndex > 0) { // Debug.LogError( "CheckSumConvert Prev - \n" + strRecvPacketJson ); strRecvPacketJson = strRecvPacketJson.Substring(0, nCheckSumIndex) + strRecvPacketJson.Substring(nCheckSumIndexAfter, strRecvPacketJson.Length - nCheckSumIndexAfter); // Debug.LogError( "CheckSumConvert After - \n" + strRecvPacketJson ); } } } //-------------------------------- // //-------------------------------- if (strRecvCheckSum == null || strRecvCheckSum.Length <= 0 ) { #if BUILD_TYPE_DEBUG Debug.Log("Recv CheckSum None..."); #endif return(true); } { //sha1 System.Security.Cryptography.SHA1 sha1 = System.Security.Cryptography.SHA1.Create(); //ユーザー作成時は正常終了後にuuidセットしてるので送ったjsonからuuid取り出す if (Uuid.Length <= 0 && packData.m_PacketAPI == SERVER_API.SERVER_API_USER_CREATE) { //JsonData型にパース JsonData sendMessageJsonData = JsonMapper.ToObject(packData.m_PacketSendMessage); //パース後のJsonData型にuuidがあるか? if (true == (sendMessageJsonData as IDictionary).Contains("uuid")) { //jsonのuuidを設定 Uuid = (string)sendMessageJsonData["uuid"]; } } var sha1Bs = sha1.ComputeHash(new UTF8Encoding().GetBytes(strRecvPacketJson + Uuid)); strRecvPacketJson = BitConverter.ToString(sha1Bs).ToLower().Replace("-", ""); } ServerCheckSumInfo checksumInfo = new ServerCheckSumInfo(); checksumInfo.packet_unique_num = packData.m_PacketUniqueNum; checksumInfo.local_check_sum = 0; checksumInfo.server_check_sum = 0; check_sum_info.Add(checksumInfo); #if BUILD_TYPE_DEBUG //Debug.Log(string.Format("checksum|{0}|{1}|{2}", Uuid, strRecvCheckSum, strRecvPacketJson)); #endif return(true); }
public void Copy(ServerCheckSumInfo cSrc) { packet_unique_num = cSrc.packet_unique_num; local_check_sum = cSrc.local_check_sum; server_check_sum = cSrc.server_check_sum; }