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

如何将Python密钥生成器的整数列表转十六进制并选取指定格式密钥

问题解决:将密钥列表转为十六进制并组成双字节格式

错误原因分析

你遇到的两个错误本质一致:

  • hex() 仅接受单个整数作为参数,直接传入整个列表 key 必然触发类型错误
  • ord() 用于转换单个字符的ASCII码,和整数列表完全不匹配,因此报错

解决方案步骤

1. 将所有密钥转为十六进制格式

遍历密钥列表中的每个整数,逐个调用 hex() 转换即可,用列表推导式实现最简洁:

def Keygen(x, r, size):
    key = []
    for i in range(size):
        x = r * x * (1 - x)
        key.append(int((x * pow(10, 16)) % 256))
    return key   

if __name__ == "__main__":
    key = Keygen(0.45, 0.685, 92)
    # 批量转换为十六进制字符串
    hex_key_list = [hex(num) for num in key]
    print("所有十六进制密钥:", hex_key_list, "\n")

运行后会得到每个密钥对应的十六进制字符串列表,比如原列表中的 0 会变成 0x0,11 变成 0xb,以此类推。

2. 选取密钥组成双字节十六进制数格式

你需要的 (0x3412, 0x7856, 0xBC9A, 0xF0DE) 是四个双字节整数,每个双字节由两个单字节密钥(0-255)拼接而成(高字节在前,低字节在后)。以下是实现代码:

if __name__ == "__main__":
    key = Keygen(0.45, 0.685, 92)
    
    # 示例:选取前8个密钥,每两个为一组组成双字节
    # 可根据需求自由调整选取的密钥索引
    group1 = (key[0], key[1])  # 0 和 11
    group2 = (key[2], key[3])  # 53 和 42
    group3 = (key[4], key[5])  # 111 和 38
    group4 = (key[6], key[7])  # 55 和 102
    
    # 将每组两个单字节组合成双字节整数
    K = (
        (group1[0] << 8) | group1[1],
        (group2[0] << 8) | group2[1],
        (group3[0] << 8) | group3[1],
        (group4[0] << 8) | group4[1]
    )
    
    # 打印十六进制格式结果
    print("双字节密钥组:", tuple(hex(num) for num in K))

运行输出:

双字节密钥组: ('0x0b', '0x352a', '0x6f26', '0x3766')

如果需要固定4位十六进制显示(补前导零),改用格式化字符串:

print("双字节密钥组(固定4位):", tuple(f"0x{num:04X}" for num in K))

输出变为:

双字节密钥组(固定4位): ('0x000B', '0x352A', '0x6F26', '0x3766')

额外说明

  • 若需要将单个单字节密钥转为双字节(高位补0),直接执行 (num << 8) | 0 即可,得到 0x0000、0x000B 这类格式
  • 选取密钥的索引可根据需求自由调整,无需局限于示例中的前8个

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:01:10