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;
    }
Beispiel #2
0
    /*==========================================================================*/
    /*		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);
    }
Beispiel #3
0
 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;
 }