异或密码
简单异或密码(英語:simple XOR cipher)是密码学中一种简单的加密算法,它按照如下原则进行运算:
- A 0 = A
- A A = 0
- (A B) C = A (B C)
- (B A) A = B 0 = B
其中为逻辑异或(XOR)运算的符号。按这种逻辑,文本序列的每个字符可以通过与给定的密钥进行按位异或运算来加密。如果要解密,只需要将加密後的结果与密钥再次进行按位异或运算即可。
例如,字符串“Wiki”(8位ASCII:01010111 01101001 01101011 01101001) 可以按如下的方式用密钥11110011进行加密:
01010111 01101001 01101011 01101001 11110011 11110011 11110011 11110011 = 10100100 10011010 10011000 10011010
此種加密方法類似對稱加密,故解密的方式如下:
10100100 10011010 10011000 10011010 11110011 11110011 11110011 11110011 = 01010111 01101001 01101011 01101001
异或运算符常作为更为复杂的加密算法的组成部分。对於其本身来说,如果使用不断重复的密钥,利用频率分析就可以破解这种简单的异或密码。如果消息的内容被猜出或知道,密钥就会泄露。异或密码值得使用的原因主要是其易於实现,而且计算成本小。简单重复异或加密有时用於不需要特别安全的情况下来隐藏信息。
如果密钥是随机的(不重复),而且与消息长度相同,异或密码就会更为安全。当密钥流由伪随机数发生器生成时,结果就是流密码。若密钥是真正随机的,结果就是一次性密碼本,這種密码在理论上是不可破解的。
在这些密码的任何部分中,密钥运算符在已知明文攻击下都是脆弱的,这是因为明文 密文 = 密钥。
程式碼範例编辑
C語言编辑
加密:
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++; }
golang编辑
func XOR(input []byte, key []byte) []byte { //解密時僅需將原本的output改到input,key不變即可output := make([]byte, len(input))for i := range input {output[i] = input[i] ^ key[i%len(key)] //當input比key長時會不斷使用key對每一個byte加密}return output}
Python编辑
#!/usr/bin/env pythonfrom __future__ import print_functionfrom os import urandomdef o(x): # Python 2 and 3 compatibility with bytes if isinstance(x, str): return ord(x) else: return xdef genkey(length): """Generate key""" return urandom(length)def xor_strings(s,t): """xor two strings together""" return "".join(chr(o(a)^o(b)) for a,b in zip(s,t))message = 'This is a secret message'print('message:', message)key = genkey(len(message))print('key:', key)cipherText = xor_strings(message, key)print('cipherText:', cipherText)print('decrypted:', xor_strings(cipherText,key))# verifyif xor_strings(cipherText, key) == message: print('Unit test passed')else: print('Unit test failed')
参见编辑
- 维尔南密码
- 维吉尼亚密码
外部链接编辑
🔥 Top keywords: Baike: 首页Special:搜索毛泽东家族榮耀之繼承者天之驕女鐵拳英雄九龍城寨之圍城黃循財背着善宰跑篠崎泫妮妃雅新生 (网络剧)劉偉健斯洛伐克习近平劉俊謙 (香港)李显龙歌手2024佛誕淚之女王2024年泰國羽球公開賽新加坡總理邊佑錫新加坡Energy (組合)庆余年九龍寨城六四事件家族榮耀金智媛彌助菲律宾胖猫跳江事件劉寶傑DAY6林峯張文傑李光耀神耆小子張鳳妮黃世聰Seventeen (組合)维基百科願榮光歸香港中華民國鬼滅之刃 柱訓練篇2024年英雄联盟季中邀请赛中华人民共和国TripleS金秀賢 (男演員)罗伯特·菲佐井柏然2024年世界女排联赛黃偉哲怪獸8號佘詩曼Foodpanda金惠奫新加坡总统香緹·摩爾于北辰 (1968年)王嘉爾笑看風雲排球少年!!角色列表林飛帆郭葦昀馴鹿寶貝翁靜晶猩球崛起:王國誕生ILLIT尼古拉·約基奇春色寄情人周殷廷鬼滅之刃排球少年!!吳釗燮逆天奇案2不夠善良的我們BABYMONSTER李正皓尚达曼BOYNEXTDOOR胡子彤IVE (組合)陳靜 (香港)香港吴作栋黃道十二宮凡希亚·奥伊亚胡宇威長洲太平清醮張員瑛搜查班長1958伍允龍习明泽黄岩岛賴清德偶然遇見的你虽然不是英雄