You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现one-time-pad一次一密生成随机密钥返回重复字符问题求助

问题原因

你采用dt.now().microsecond作为随机数生成的数据源,普通运行时generate_random_key内的while循环执行速度极快,全程执行耗时小于1微秒,导致每次循环读取到的微秒数值完全一致,模26计算后得到的结果相同,最终输出全重复的字母。
调试代码时单步执行存在人为操作间隔,每次循环读取到的微秒数值不同,因此可以得到符合预期的随机结果。

另外注意你的代码未补充datetime模块的导入语句,实际运行前需要先添加from datetime import datetime as dt否则会直接触发命名错误。

解决方法

推荐使用Python标准库提供的随机数生成方案,随机性和稳定性都远高于自行读取时间戳的实现:

  • 普通场景可以使用random模块生成0-25区间的随机整数,修改后的函数示例:
import random

# 其余原有代码保持不变
def generate_random_key():
    length = len(text)-1
    key=""
    while length >= 0:
        random_val = random.randint(0,25)
        key = key + find_letter(random_val)
        length -=1
    return key
  • 如果是密码学场景的一次一密实现,要求使用密码学安全的随机数,可以替换为secrets模块:
import secrets

# 其余原有代码保持不变
def generate_random_key():
    length = len(text)-1
    key=""
    while length >= 0:
        random_val = secrets.randbelow(26)
        key = key + find_letter(random_val)
        length -=1
    return key

不推荐通过在循环中添加微秒级延迟的方式解决该问题,该方案效率极低,且生成的随机值规律性强,不符合一次一密的安全要求。

内容的提问来源于stack exchange,提问作者yaser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:09:03