码迷,mamicode.com
首页 > 其他好文 > 详细

关于加密程序

时间:2015-08-25 18:40:52      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:

开发加密程序时,有很多种加密算法可以选择,blowfish,AES,还有简单的异或运算啦等等

其实这些都不是关键,关键点是如何隐藏加密算法的key

如果将key作为明文保存在程序中,很容易在数据段中查看到相应的值

从而失去了加密的意义

 

由此可见,一个关键点在于隐藏key字符

使用boost库的序列化宏,可以简单的实现隐藏key的功能

代码如下:

 1 #define CRYPT_MACRO(r, d, i, elem) ( elem ^ ( d - i ) )
 2 
 3 #include <boost/preprocessor/cat.hpp>
 4 #include <boost/preprocessor/seq/for_each_i.hpp>
 5 #include <boost/preprocessor/seq/enum.hpp>
 6 
 7 #define DEFINE_HIDDEN_STRING(NAME, SEED, SEQ) 8 static const char* BOOST_PP_CAT(Get, NAME)() 9 {10     static char data[] = {11         BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_FOR_EACH_I(CRYPT_MACRO, SEED, SEQ)),12         \013                                                                 };14 15     static bool isEncrypted = true;16     if ( isEncrypted )17                     {18         for (unsigned i = 0; i < ( sizeof(data) / sizeof(data[0]) ) - 1; ++i)19                                         {20             data[i] = CRYPT_MACRO(_, SEED, i, data[i]);21                                         }22 23         isEncrypted = false;24                     }25 26     return data;27 }
28 
29 //32116D937A114CF68FBA11E55F4B7150
30 //258795D85B004823B5546DB33E055F0D
31 
32 DEFINE_HIDDEN_STRING(EncryptionKey1, 0x7f, (3)(2)(1)(1)(6)(D)(9)(3)(7)(A)(1)(1)(4)(C)(F)(6)(8)(F)(B)(A)(1)(1)(E)(5)(5)(F)(4)(B)(7)(1)(5)(0))
33 DEFINE_HIDDEN_STRING(EncryptionKey2, 0x5d, (2)(5)(8)(7)(9)(5)(D)(8)(5)(B)(0)(0)(4)(8)(2)(3)(B)(5)(5)(4)(6)(D)(B)(3)(3)(E)(0)(5)(5)(F)(0)(D))
34 
35 const char* GetEncodeKey1(void)
36 {
37     return GetEncryptionKey1();
38 }
39 
40 const char* GetEncodeKey2(void)
41 {
42     return GetEncryptionKey2();
43 }

原始的key是由guid生成器生成,将key序列化打乱之后,在程序的二进制数据,代码段,数据段都不会找到key的原始数据了

关于加密程序

标签:

原文地址:http://www.cnblogs.com/jojodru/p/4757729.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!