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

如何从终端输入读取Fernet密钥?Python本地API密钥加密场景咨询

嘿,能看到你在动手实践Python加密相关的内容真的很棒!关于你想从终端读取Fernet密钥的需求,这里有几个实用的方案,你可以根据自己的场景选择:

方法1:用input()直接读取终端输入(快速简单)

这是最适合小型脚本或者测试场景的方式,直接通过终端交互式输入密钥:

from cryptography.fernet import Fernet, InvalidToken
import string
import random

# 你的API密钥生成逻辑保持不变
char_num = 24
allchar = string.ascii_letters + string.digits
random_api = "".join(random.choice(allchar) for x in range(char_num))
print("Generated API key:", random_api)

# 从终端读取Fernet密钥,strip()去掉首尾空格避免输入失误
crypt_key_input = input("请输入你的Fernet密钥:").strip()

try:
    # 验证密钥有效性并初始化Fernet对象
    fernet_key = Fernet(crypt_key_input)
    # 加密API密钥(注意要转成bytes格式)
    encrypted_api = fernet_key.encrypt(random_api.encode())
    print("加密后的API密钥:", encrypted_api.decode())
except InvalidToken:
    print("❌ 错误:输入的不是有效的Fernet密钥!请确保是URL-safe的base64编码字符串(长度为44字符)。")

方法2:通过命令行参数传入密钥(适合脚本化/自动化场景)

如果你的脚本需要频繁被调用,或者想通过脚本参数传递密钥,用argparse会更规范,也方便和其他工具集成:

from cryptography.fernet import Fernet, InvalidToken
import string
import random
import argparse

def main():
    # 设置命令行参数解析器
    parser = argparse.ArgumentParser(description="加密随机生成的API密钥")
    parser.add_argument("--fernet-key", required=True, help="用于加密的Fernet密钥(URL-safe base64格式,44字符)")
    args = parser.parse_args()

    # 生成API密钥
    char_num = 24
    allchar = string.ascii_letters + string.digits
    random_api = "".join(random.choice(allchar) for x in range(char_num))
    print("Generated API key:", random_api)

    try:
        fernet_key = Fernet(args.fernet_key)
        encrypted_api = fernet_key.encrypt(random_api.encode())
        print("加密后的API密钥:", encrypted_api.decode())
    except InvalidToken:
        print("❌ 错误:无效的Fernet密钥,请检查格式!")

if __name__ == "__main__":
    main()

运行方式:在终端里执行

python your_script_name.py --fernet-key 你的Fernet密钥字符串

额外小贴士

  • Fernet密钥格式要求:必须是URL-safe的base64编码字符串,长度固定为44字符。如果是你自己生成的密钥,用Fernet.generate_key()得到的就是符合要求的格式,记得妥善保管,丢失后无法解密数据!
  • 可选优化:可以给脚本加一个生成并保存密钥的功能,比如:
    def generate_save_key():
        key = Fernet.generate_key()
        with open("fernet_secret.key", "w") as f:
            f.write(key.decode())
        print("✅ Fernet密钥已保存到fernet_secret.key,请妥善存储!")
    
    这样你可以先调用这个函数生成密钥,之后再用它来加密API密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:43:44