V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SodaPopBoy
V2EX  ›  加密货币

十行代码,生成绝对安全助记词

  •  
  •   SodaPopBoy · 10 天前 · 1022 次点击

    最近 V2 加密币圈热度很高,我对助记词生成模块 mnemonic 进行了阉割,只保留了核心的 助记词生成算法,支持 12–24 个 BIP39 标准助记词,无依赖,可以在任何 python 环境执行,在不触网的情况下运行,理论上绝对安全。

    在原有算法基础上,增加了 用户输入熵 + 时间熵,防止运行环境的随机函数有后门。 生成的助记词可以直接导入硬件钱包或者软钱包的冷钱包模式,野路子硬件钱包用的放心点。

    
    import hashlib,secrets,time,os
    
    # BIP39 英文单词表( 2048 个,这里自己补全)
    wordlist = ['abandon', 'ability', 'able', 'about', 'above', 'absent', 'absorb']
            
    def generate(strength: int = 128, extra_entropy: str = "") -> str:
        if strength not in [128, 160, 192, 224, 256]:
            raise ValueError("strength 必须是 [128,160,192,224,256]")
        sys_entropy = secrets.token_bytes(strength // 8)
        user_entropy = extra_entropy.encode("utf-8") if extra_entropy else os.urandom(16)
        time_entropy = str(time.time_ns()).encode("utf-8")
        combined = hashlib.sha256(sys_entropy + user_entropy + time_entropy).digest()
        data = combined[: strength // 8]
        h = hashlib.sha256(data).hexdigest()
        b = (
            bin(int.from_bytes(data, byteorder="big"))[2:].zfill(len(data) * 8)
            + bin(int(h, 16))[2:].zfill(256)[: len(data) * 8 // 32]
        )
        result = []
        for i in range(len(b) // 11):
            idx = int(b[i * 11 : (i + 1) * 11], 2)
            result.append(wordlist[idx])
        return " ".join(result)
    
    if __name__ == "__main__":
        #默认 12 个助记词
        print(generate(128, input("请输入你的随机字符串: ")))
    
    
    3 条回复    2025-08-25 10:31:22 +08:00
    AoEiuV020JP
        2
    AoEiuV020JP  
       9 天前
    生成助记词这一步要安全还是比较容易的, 我比较在意你说的“软钱包的冷钱包模式”具体是什么,
    SodaPopBoy
        3
    SodaPopBoy  
    OP
       9 天前
    @AoEiuV020JP 有些软钱包有冷钱包模式,可以在不触网的情况下使用二维码扫码签名,比如 tronlink 、Ownbit 、imToken
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1023 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:56 · PVG 02:56 · LAX 11:56 · JFK 14:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.