猫玖破密啦

题目:

终究还是猫哥:3d5a3a0cfff7fb2e29194c0b7a89f284ff19a8
玖离:收到消息Oh,what_is_the_flag
玖离:7468655f666c61675f69735f666c13556d2cf2faec1e2d0f330b7dcceea1c62cb2
终究还是猫哥:收到消息************************************
已知使用了异或进行了加密,通信双方手中的密钥相同,请解出‘终究还是猫哥’收到的明文



1、猫发送密文,玖接受到后用密钥进行破解获得明文
2、玖发送加密信息给猫,问猫接受到的明文是什么——猫接受到的是玖发送的密文,所以需要密钥解密,密钥又是相同的,所以需要用步骤1取得密钥


1中的密钥求法:

异或算法只能用二进制进行异或,相同则为0,在字符串之间,例如:A^B=C,反之B^C=A,或者A^C=B.    所以1中的密文^密钥=明文,反之,密文^明文=密钥



二,十进制,十六进制依次对应的结果:
猫的密文:111101010110100011101000001100111111111111011111111011001011100010100100011001010011000000101101111010100010011111001010000100111111110001100110101000

1368205316501309152335016276706240728768911784

3d5a3a0cfff7fb2e29194c0b7a89f284ff19a8

玖接收到消息后解密后的明文:
1001111011010000010110001110111011010000110000101110100010111110110100101110011010111110111010001101000011001010101111101100110011011000110000101100111

1770833679565073800544537810246306849905992039

4f682c776861745f69735f7468655f666c6167



异或得到的密钥:1110010001100100001011001111011100101111001011010001111011100010100000001101010000100110111111100010010111011001010110111100010100100110111100011001111

2546648217423285344414476194497936508289513679

7232167B97968F71406A137F12ECADE29378CF


玖发出的密文:11101000110100001100101010111110110011001101100011000010110011101011111011010010111001101011111011001100110110000010011010101010110110100101100111100101111101011101100000111100010110100001111001100110000101101111101110011001110111010100001110001100010110010110010

13479101997762112292594521034034389377799862087305995464570874642725817064762546

7468655f666c61675f69735f666c13556d2cf2faec1e2d0f330b7dcceea1c62cb2


跟密文异或后得到猫最后接受的明文二进制:11101000110100001100101010111110110011001101100011000010110011101011111011010010111001101011111011001100110110001100001011001110111101101010111011001010110110001100011011011110110110101100101001000000111010001101111001000000100001101000011010101010101010001111101

13479101997762112292594521034034391118830829094402208504536293746893526815560829

7468655F666C61675F69735F666C61677B57656C636F6D6520746F20434355547D


最后转为字符串:the_flag_is_flag{Welcome to CCUT}

异或的python脚本:

def xor_binary_strings(bin_str1, bin_str2):
    # 确保两个字符串的长度相同,不同长度的二进制字符串需要填充
    max_len = max(len(bin_str1), len(bin_str2))
    bin_str1 = bin_str1.zfill(max_len)  # 用0填充到相同长度
    bin_str2 = bin_str2.zfill(max_len)

    # 进行异或操作
    result = ''
    for b1, b2 in zip(bin_str1, bin_str2):
        # 异或操作:相同为0,不同为1
        result += '1' if b1 != b2 else '0'

    return result


# 示例输入
bin_str1 = input("请输入第一个二进制字符串: ")
bin_str2 = input("请输入第二个二进制字符串: ")

# 计算异或结果
xor_result = xor_binary_strings(bin_str1, bin_str2)

# 输出结果
print(f"异或结果: {xor_result}")
def xor_decimal_numbers(num1, num2):
    # 进行异或操作
    result = num1 ^ num2
    return result


# 示例输入
num1 = int(input("请输入第一个十进制数字: "))
num2 = int(input("请输入第二个十进制数字: "))

# 计算异或结果
xor_result = xor_decimal_numbers(num1, num2)

# 输出结果
print(f"异或结果: {xor_result}")
def xor_hex_numbers(hex_str1, hex_str2):
    # 将十六进制字符串转换为整数
    num1 = int(hex_str1, 16)
    num2 = int(hex_str2, 16)

    # 进行异或操作
    result = num1 ^ num2

    # 将结果转换回十六进制字符串(去掉 '0x' 前缀,并转为大写)
    return hex(result)[2:].upper()


# 示例输入
hex_str1 = input("请输入第一个十六进制数字(例如:1A3F):")
hex_str2 = input("请输入第二个十六进制数字(例如:2B4):")

# 计算异或结果
xor_result = xor_hex_numbers(hex_str1, hex_str2)

# 输出结果
print(f"异或结果: {xor_result}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值