Alice与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()

运行后得到答案

posted @ 2025-01-08 17:48  Draina  阅读(55)  评论(0)    收藏  举报