当前位置: 首页 > article >正文

猫玖破密啦

题目:

终究还是猫哥: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}")


http://www.kler.cn/news/340395.html

相关文章:

  • 人工智能之机器学习
  • 多模态简单了解
  • Vue的基本用法及模板语法
  • 如何在Android Studio中找到CMakeLists.txt的打印信息
  • 【题目解析】蓝桥杯23国赛C++中高级组 - 斗鱼养殖场
  • 【在Linux世界中追寻伟大的One Piece】DNS与ICMP
  • Study-Oracle-11-ORALCE19C-ADG集群搭建
  • docker简述
  • 讯飞星火编排创建智能体学习(五):变量和文本拼接
  • 209.长度最小的子数组
  • Python 的测试
  • 【大数据应用开发】2023年全国职业院校技能大赛赛题第05套
  • LSTM 长短期记忆网络:解锁时间序列数据的深层秘密
  • 省市区json记录
  • 五十、架构设计经验与技巧(架构设计基本原则)
  • 目标检测指标:AP,mAP
  • 【C语言进阶教程】数据结构与算法(1.简介 2.数据结构基础 3.链表)
  • Zig开发环境搭建
  • 如何通过Kubectl 重启Pod的六种方法
  • .NET周刊【9月第4期 2024-09-22】