開發加密程式時,有很多種加密演算法可以選擇,blowfish,aes,還有簡單的異或運算啦等等
其實這些都不是關鍵,關鍵點是如何隱藏加密演算法的key
如果將key作為明文儲存在程式中,很容易在資料段中檢視到相應的值
從而失去了加密的意義
由此可見,乙個關鍵點在於隱藏key字元
使用boost庫的序列化巨集,可以簡單的實現隱藏key的功能
**如下:
1#define crypt_macro(r, d, i, elem) ( elem ^ ( d - i ) )
23 #include 4 #include 5 #include enum.hpp>67
#define define_hidden_string(name, seed, seq)\
8static
const
char*boost_pp_cat(get, name)()\9;\
14\15static
bool isencrypted = true
;\16
if( isencrypted )\17\
22\23 isencrypted = false
;\24
}\25\26
return
data;\27}
2829
//32116d937a114cf68fba11e55f4b7150
30//
258795d85b004823b5546db33e055f0d
3132 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
35const
char* getencodekey1(void)36
3940
const
char* getencodekey2(void)41
原始的key是由guid生成器生成,將key序列化打亂之後,在程式的二進位制資料,**段,資料段都不會找到key的原始資料了
關於對稱加密
彼此通訊的a b雙方在交換傳遞資料的時候,加密解密用的是同一種演算法,所以必須提前將規則告訴對方,否則就無法解密。優點 演算法公開 計算量小 加密速度快 加密效率高。缺點 秘鑰傳遞安全性得不到保證,且每次使用對稱加密演算法時,a b都需要使用其他人不知道的惟一鑰匙,這會使得通訊雙方所擁有的鑰匙數量呈...
關於sqlite 加密
在移動裝置上,不管是ios還是android大家都喜歡使用sqlite,它體積小功能卻不錯,滿足大家的需求。但是使用過大家都清楚免費版sqlite資料是明文的,如果存放的是使用者敏感資訊,只要取出應用中的資料庫,神馬使用者名稱,密碼都一目了然。那麼你還敢使用手機登入什麼網銀神馬的麼?使用免費版本的沒...
關於對稱加密與非對稱加密
1 保密 這個很容易理解,就比如你寫的日記,不想被父母看到。2 鑑別 認證 這個就比如有個人說他是你爸爸,你如何鑑別他不是你爸爸呢?比如驗血嘛,就是個鑑別認證。3 完整性 完整性也很容易理解,就是資料是否是完整的,沒有被篡改啥的。4 不可否認性 不可否認性就是比如像古代按手印來證明是你已經確認了。這...