**异或密码**
一.XOR(异或运算法则)
XOR(异或运算)
数学符号:⊕ (z = x ⊕ y)
计算机符号:XOR/xor (z = x xor y)
计算口诀:同为0,异为1
根据一下规则
True ⊕ False = True
False ⊕ True = True
False⊕ False = False
True ⊕ True = False
二.基本运算举例:
两个二进制数进行异或运算:
00000000
XOR
10101010
结果:
10101010
两个十进制数进行异或运算:5⊕3=?
1.进行异或计算前会把数值都转换为二进制,
2.再把结果转化为十进制。
5⋙0101 3⋙0011
结果:0110
0110⋙6
所以5⊕3=6
三.XOR运算特点:
XOR 运算有一个很奇妙的特点:如果对一个值连续做两次 XOR,会返回这个值本身。
// 第一次 XOR
1010 ^ 1111 // 0101
// 第二次 XOR
0101 ^ 1111 // 1010
在这里插入代码片
四.XOR加密运用:
message XOR key // cipherText
cipherText XOR key // message
上面代码中,原始信息是message,密钥是key,第一次 XOR 会得到加密文本cipherText。对方拿到以后,再用key做一次 XOR 运算,就会还原得到message。
五.完美保密性
PS:只要满足以下两个条件,XOR加密是无法破解的
1.key的长度大于等于message
2.key必须是一次性的,且每次都要随机产生
六.CTF实例:异性相吸
密文:ἇ̀Ј唒ဃ塔屋䩘卖剄䐃堂ن䝔嘅均ቄ䩝ᬔ
秘钥:asadsasdasdasdasdasdasdasdasdasdqwesqf
- 将密文和秘钥用winhex转化为二进制数字
- 异或运算得到结果
- 将结果在winhex上粘贴为二进制数据,也就是16进制数据,对应ASSIC码即为flag
脚本:
a = '0110000101110011011000010110010001110011011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011100010111011101100101011100110111000101100110'
b = '0000011100011111000000000000001100001000000001000001001001010101000000110001000001010100010110000100101101011100010110000100101001010110010100110100010001010010000000110100010000000010010110000100011000000110010101000100011100000101010101100100011101010111010001000001001001011101010010100001010000011011'
c = ''
for i in range(len(a)):
if(a[i] == b[i]):
c+='0'
else:
c+='1'
print(c)
结果为:
0110011001101100011000010110011101111011011001010110000100110001011000100110001100110000001110010011100000111000001110010011100100110010001100100011011100110110011000100011011101100110001110010011010101100010001101010011010001100001001101110011010000110011001101010110010100111000001110010110010101111101
750

被折叠的 条评论
为什么被折叠?



