簡介
異或運算(XOR)是一種電腦程式設計語言中很重要基於二進制的位運算,對提高程式可讀性和運行效率具有重要實際價值。異或運算具有交換律、結合律、自反律、配對等常見性質,以廣泛套用於奇偶性判別、糾錯檢驗、網路編碼、信息加密、圖像處理等套用中。
異或密碼是一種通過異或運算進行加密的算法,它按照如下原則進行運算:
其中
為邏輯異或(XOR)運算的符號。例如,字串“Wiki”(8位ASCII:01010111 01101001 01101011 01101001) 可以按如下的方式用密鑰11110011進行加密:
此種加密方法類似對稱加密,故解密的方式如下:
異或運算符常作為更為複雜的加密算法的組成部分。對於其本身來說,如果使用不斷重複的密鑰,利用頻率分析就可以破解這種簡單的異或密碼。如果訊息的內容被猜出或知道,密鑰就會泄露。異或密碼值得使用的原因主要是其易於實現,而且計算成本小。簡單重複異或加密有時用於不需要特別安全的情況下來隱藏信息。
如果密鑰是隨機的(不重複),而且與訊息長度相同,異或密碼就會更為安全。當密鑰流由
偽隨機數發生器生成時,結果就是流密碼。若密鑰是真正隨機的,結果就是一次性密碼本,這種密碼在理論上是不可破解的。這些密碼的任何部分中,密鑰運算符在已知明文攻擊下都是脆弱的,這是因為明文
密文 = 密鑰。
頻率分析
頻率分析在數學、物理學和信號處理中是一種分解函式、波形、或者信號的頻率組成,以獲取頻譜的方法。英語文本中典型的字母分布情況。較弱的密碼會顯示出這個分布,從而被密碼專家所破譯。字詞分布情況,字型越大,代表該字詞出現的機率就越大。在密碼學中,頻率分析是指研究字母或者字母組合在文本中出現的頻率。套用頻率分析可以破解古典密碼。
頻率分析基於如下原理:在任何一種書面語言中,不同的字母或字母組合出現的頻率各不相同。而且,對於以這種語言書寫的任意一段文本,都具有大致相同的特徵字母分布。比如,在英語中,字母E出現的頻率很高,而X則出現得較少。類似地,ST、NG、TH,以及QU等雙字母組合出現的頻率非常高,NZ、QJ組合則極少。英語中出現頻率最高的12個字母可以簡記為“ETAOIN SHRDLU”。
代碼示例
加密:
while (done < len) {
tmp_ch = *buffer;
for(int i = 0; i < key_len; i++)
tmp_ch ^= key[i];
*crypted = tmp_ch;
crypted++; buffer++; done++;
}
解密:
while (done <= len) {
tmp_ch = *buffer;
for(int i = key_len-1; i >= 0; i--)
tmp_ch ^= key[i];
*decrypted = tmp_ch;
decrypted++; buffer++; done++;
}