簡單異或加密處理
阿新 • • 發佈:2018-12-17
異或的理解: 將十進位制轉換成二進位制進行異或,相同的為0 ,不相同的為1,可以看下圖理解,異或之後得出的二進位制再轉十進位制,之後的就是異或後的值
斷點檢視過程:
異或前:
異或後:
Java版程式碼:
private static byte[] keyBytes = {1,5,3,4,5}; public static String xor_go(String enc){ byte[] b = enc.getBytes(Charset.forName("UTF-8")); for(int i=0;i<b.length;i++){ b[i] = (byte) (b[i]^(keyBytes[i%keyBytes.length])); } return new String(b); }
使用:加密和解密都是同一個方法
C++版,jni裡面用的,可以加密重要的字串,為除錯增加一點點難度吧
int key[] = {1, 5, 3, 4, 5};//加密字元
//異或加密
void xor_go(char *pstr, int *pkey) {
int len = strlen(pstr);//獲取長度
for (int i = 0; i < len; i++) {
*(pstr + i) = ((*(pstr + i)) ^ (pkey[i % 5]));
}
}
用法:
/** * 執行加密解密的方法 */ char *sub_go(char *s, int type) { char *p = s; if (type == 1) { xor_go(s, key);//加密 // LOGE("加密後 %s", p); } xor_go(s, key);//解密 // LOGE("解密後 %s", p); return p; }
s傳入的是char s[] 陣列型別