C++/CLI 生成的 HMACSHA256 Hash key

C++/CLI 函数


我正在使用 C++/CLI 生成哈希键,并通过网络将数据和哈希键发送到用 Java 编码的其他应用程序。


但是 Java 应用程序会生成不同的 HashKey。


是否由于不同服务器上的不同应用程序导致哈希键不同?


知道我哪里出错了吗?


提前致谢。


 char* EncodeData(char* ap_key, char*  ap_sourceData)

     {

        char* lp_data_to_send = NULL;

        int key_len = strlen(ap_key);


        String^ lv_data = gcnew String(ap_sourceData);//Getting Data in System String

        array<Byte>^ lv_main_data   = Encoding::UTF8->GetBytes(lv_data);//Encoding to UTF-8


        array<Byte>^key = gcnew array< Byte >(key_len + 2);

        Marshal::Copy((IntPtr)ap_key, key, 0, key_len); //Copy key in System Array Byte


        // Initialize the keyed hash object.

        HMACSHA256^ myhmacsha256 = gcnew HMACSHA256(key);


        // Compute the hash of the input file.

        array<Byte>^hashValue = myhmacsha256->ComputeHash(lv_main_data);


        String^ lv_hex_convert = BitConverter::ToString(hashValue)->Replace("-","");    //Converted to Hexadecimal and replacing '-' with ""

        Console::WriteLine(lv_hex_convert);//Converted Hexadecimal Hashkey


           //Converting to Char*

            lp_data_to_send = (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(lv_hex_convert);//Converting again to char* to be send to Calling Function


          myhmacsha256->Clear(); //myhmacsha256 clear Instance

          return lp_data_to_send;//Return Char*

    }



int main()

            {

                //Secret Key shared by C++/CLi application and Java Application

                String ^ lv_key_g = " My Secret Key";

                char lv_sourceData[] = { "My data" };

                char lv_destinationData[512] = { "" };

                char* lp_ret = NULL;


                array<Byte>^secretkey = gcnew array<Byte>(65); //Declaring Array

                //Converting to UTF-8 

                secretkey = Encoding::UTF8->GetBytes(lv_key_g);


                /*Converting to char* */




繁花不似锦
浏览 244回答 1
1回答

青春有我

return lp_data_to_send;//Return Char*将返回一个悬空指针,您可能应该返回一个引用计数的字符串lv_hex_convert。另一个可疑的事情是密钥比所需的长 2 个字节。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java