hw80520997 发表于 2016-05-19 10:05

如何在程序中隐藏硬编码的字符串?

需求是这样的。客户端程序需要收集一些手机的本地信息然后加密传回服务器端。这个过程不希望被别人破译。一方面怕别人拿到这些信息。另一方面也怕别人了解算法和密钥后构造数据欺骗服务器

加密时客户端程序需要一个秘钥来对数据进行加密,但是这个秘钥不能被别人反编译看到(或者说很容易的)。请问该如何隐藏呢

比如下面这段代码不能被人用二进制编辑器打开直接打开看到"abcdefg"的内容,该怎么做呢

const char* str = "abcdefg";


当然,要是能让秘钥可以更新就更好了。但是需要一个完整周密在方案才能做到秘钥从服务器传输到客户端不被截获。而且客户端是手机。都是非登陆用户没办法标识客户端的唯一性。还有,如果要更新秘钥的话那秘钥在保存也是个问题

hellioncu 发表于 2016-05-19 10:15

用非对称算法呀,公钥反正是公开的。

另外一般加密算法没有要求密钥是字符串,任意二进制数据都可以

hw80520997 发表于 2016-05-19 10:22

回复 2# hellioncu

感谢回复

非对称算法也一样加密的私钥被获取一样可以用相同在秘钥来构建数据来欺骗服务器,这个应该不行

至于任意二进制可以做秘钥。这个请问怎么定义写代码才能让这段二进制数据被轻易看到呢?
   

hellioncu 发表于 2016-05-19 10:39

hw80520997 发表于 2016-05-19 10:22 static/image/common/back.gif
回复 2# hellioncu

感谢回复


加密前定义一个数组,写点代码填充这个数组当作密钥,不跟踪就不知道密钥

hw80520997 发表于 2016-05-19 10:54


在生成二进制文件后,代码中的硬编吗部分会被生成类似这样的一段数据。数组也是一样。这样里面的信息很容易就被看到了


empty return str=%s text str=%s %2.2x get info start.... get_imsi get_imei get_mac get_device_id imsi imei mac device_id get_password_start 1 2 3 4 5 6 get_password_end pass_md5 json:%sN9__gnu_cxx24__concurrence_lock_errorEN9__gnu_cxx26__concurrence_unlock_errorE    __gnu_cxx::__concurrence_lock_error __gnu_cxx::__concurrence_unlock_error   std::bad_allocbasic_string::at    basic_string::copybasic_string::compare   basic_string::_S_create basic_string::erase basic_string::_M_replace_aux    basic_string::insert    basic_string::replace   basic_string::assign    basic_string::append    basic_string::resize    basic_string::_S_construct null not

hellioncu 发表于 2016-05-19 11:00

别硬编码字符串不就行了

hw80520997 发表于 2016-05-19 11:01

回复 6# hellioncu


   烦请赐教怎么不硬编呢?

hellioncu 发表于 2016-05-19 11:32

hw80520997 发表于 2016-05-19 11:01 static/image/common/back.gif
回复 6# hellioncu




char key;

key = x;
...
key=4;

诸如此类的

爻易 发表于 2016-05-19 11:36

const char str[长度] = {0x12,0x34,0x56,...};

爻易 发表于 2016-05-19 11:39

字符串另行加密得十六进制串,替换掉前面的0x12,0x34,0x56,...
页: [1] 2
查看完整版本: 如何在程序中隐藏硬编码的字符串?