密码学学习(异或密码)

                      **异或密码**

一.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

  1. 将密文和秘钥用winhex转化为二进制数字
  2. 异或运算得到结果
  3. 将结果在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值