首页 > 其他分享 >Alice与Bob-整数分解问题脚本实现

Alice与Bob-整数分解问题脚本实现

时间:2025-01-08 17:56:08浏览次数:1  
标签:Alice 整数 flag 分解 import Bob

题目:

密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希,提交答案。 注意:得到的 flag 请包上 flag{} 提交

先进行整数分解,再进行MD5杂凑,十分简单,在线有工具可以实现,这里还是给出脚本。

import math
import hashlib

# 判断一个数是否为质数
def is_prime(n):
    if n <= 1:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        if n % i == 0:
            return False
    return True

# 找到两个质数因子
def find_two_prime_factors(n):
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0 and is_prime(i):
            other_factor = n // i
            if is_prime(other_factor):
                return i, other_factor
    return None  # 如果找不到两个质数因子,返回None

# 计算数字的MD5哈希
def get_md5_hash(value):
    return hashlib.md5(value.encode('utf-8')).hexdigest()

# 主函数
def main():
    num = 98554799767  # 给定的大整数
    factors = find_two_prime_factors(num)  # 找到两个质数因子
    
    if factors:
        small, large = sorted(factors)  # 按照小的放前面,大的放后面
        combined_number = str(small) + str(large)  # 合成一个新的数字
        md5_hash = get_md5_hash(combined_number)  # 计算MD5哈希
        print(f"两个质数因子是: {small} 和 {large}")
        print(f"合成的数字是: {combined_number}")
        print(f"MD5哈希值是: {md5_hash}")
    else:
        print("无法找到两个质数因子")

if __name__ == "__main__":
    main()

运行后得到答案

标签:Alice,整数,flag,分解,import,Bob
From: https://www.cnblogs.com/Draina/p/18660272

相关文章

  • 2025-01-08:找到按位或最接近 K 的子数组。用go语言,给定一个数组 nums 和一个整数 k,你
    2025-01-08:找到按位或最接近K的子数组。用go语言,给定一个数组nums和一个整数k,你的目标是找到一个子数组,使得该子数组中所有元素进行按位或运算后的结果与k之间的绝对差值尽量小。具体地,你需要确定一个子数组nums[l…r],使得以下表达式的值最小化:|k-(nums[l]ORn......
  • 校验输入框内的数大于0的正整数
    <a-modaltitle="帖子推荐":maskClosable="false":visible="showModal"@ok="handleOk"@cancel="handleCancel":confirmLoading="confirmLoading">rules:{sort:[{required:true,message:&#......
  • 2025-01-08:找到按位或最接近 K 的子数组。用go语言,给定一个数组 nums 和一个整数 k,你
    2025-01-08:找到按位或最接近K的子数组。用go语言,给定一个数组nums和一个整数k,你的目标是找到一个子数组,使得该子数组中所有元素进行按位或运算后的结果与k之间的绝对差值尽量小。具体地,你需要确定一个子数组nums[l..r],使得以下表达式的值最小化:|k-(nums[l]ORnums[l......
  • 求两个大整数之和
    9.如何实现大正整数相加题目给出两个很大的整数,要求实现程序求出两个整数之和。超出Java中的Long类型的范围的整数,如何求和。思路使用到小学的数学了,对于大的数,小学老师会教,列竖式进行计算。对于,计算机,无法计算太大的数,进行加运算。我们可以将大的数,转成一个个小的整数,创建......
  • 力扣13罗马数字转整数
    classSolution:defromanToInt(self,s:str)->int:#定义罗马数字到整数的映射change={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}#......
  • 使用LEB128格式对整数进行编码
    大小端比如说4个字节长度的一个十六进制的无符号整数:0x12345678,使用大端和小端两种表示方法的内存布局如下: LEB128编码说明LEB128(Little-EndianBase128)使用小端表示法,因为计算机处理小端表示法比较方便。其每个字节只有7位为有效位,如果第一个字节的最高位为1,表示LEB12......
  • 96. 不同的二叉搜索树 && 343. 整数拆分 Golang实现
    这两个题目的分析思路是十分类似的。都是进行一个拆分。1.不同的二叉搜索树题目描述:给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。示例1:输入:n=3输出:5思路分析:动态规划分析:确定状态:令dp[i]......
  • 【剑指Offer刷题系列】整数拆分 II
    目录问题描述示例示例1:示例2:示例3:思路解析核心思路:具体步骤:复杂度分析:代码实现Python实现测试代码复杂度分析时间复杂度空间复杂度结论问题描述现需要将一根长度为正整数bamboo_len的竹子砍为若干段,每段长度均为正整数。请返回每段竹子长度的最大乘积......
  • 【剑指Offer刷题系列】数值的整数次方
    目录问题描述示例示例1:示例2:示例3:思路解析核心思路:具体步骤:复杂度分析:代码实现Python实现测试代码复杂度分析时间复杂度空间复杂度结论问题描述实现pow(x,n),即计算x的n次幂函数(即,x^n)。注意:x是一个双精度浮点数。n是一个整数,可以是正数、负数或零......
  • 整数序列的元素最大跨度值题解
    【题目要求】求出n个数中的最大跨度值(最大值-最小值)。一、求出最大值如果a比最大值(max)还要大,那么最大值(max)就变成a,最后max就是n个数中最大的数。二、求出最小值如果a比最小值(min)还要小,那么最小值(min)就变成a,最后min就是n个数中最小的数。【题解代码】#include<bits/stdc++.h>usin......