【问题标题】:Python: Using openssl via subprocess to decrypt with a variable passwordPython:通过子进程使用openssl使用可变密码解密
【发布时间】:2018-03-16 01:37:22
【问题描述】:

我正在尝试使用 subprocess 通过 python 脚本运行 openssl 命令,以使用已知密码解密已加密的文件。

我的代码有效,但我希望能够将密码保存为变量,即 pass = 'password' 并将该变量输入到子进程调用中,而不是将其静态作为 pass:password 。不用担心如何将密码保存到变量中,而只专注于将其作为变量传递给子进程调用,这可能吗?

我正在阅读 OpenSSL 手册页的 PASS PHRASE ARGUEMENTS 部分,所以我很好奇我是否应该使用其他选项之一 (env:var, file:pathname, fd:number, or stdin)。但是很难找到它们的使用示例,所以我不确定。

这是我目前所拥有的:

def decryptfile():
decryptFile = subprocess.Popen(["openssl", "aes-256-cbc", "-d", "-a", "-in", "pw.txt", 
                                "-out", "pw.dec.txt", "-pass", "pass:password"]
)

【问题讨论】:

    标签: python encryption openssl


    【解决方案1】:

    我使用 python 已经有一段时间了,我知道如何将子进程模块的输出存储到用户定义的变量中,如下所示

    import subprocess
    
    value = subprocess.getoutput("Your Command")
    print("The variable value is holding: {}".format(value))
    

    将密码作为变量尝试将数据从子流程输出(现在存储在变量中)拆分为列表。您还可以将该列表格式化为您需要的内容。您可以通过索引列出值来设置密码变量,其值等于该列表中的值,例如:

    hello = subprocess.getoutput("echo hello")
    list_hello = list(hello)
    # print the index value of 1 to return hello
    # use string interpolation
    print("Second value in subprocess call is : {}".format(list_hello[1]))
    # store the value of "hello" in "echo hello"
    # to a variable
    hello_str = str(list_hello[1])
    # you should cast the variable to a string
    # data type just to be safe
    print("The value of hello_str is: {}".format(hello_str))
    

    【讨论】:

    • 这不是我想要的,我会尽力澄清它。我需要能够将已经定义的变量输入到子进程调用本身中,即它使用我的变量而不是使用“pass:password”而不是等待我在终端中输入密码。不过,关于存储输出的内容肯定会在我的程序后面有用
    【解决方案2】:

    使用字符串插值

    value = "my_value"
    subprocess.call("commands {}".format(value), shell=True)
    

    使用该字符串插值方法通过您的 ssl 命令(密码)调用/包含您的变量

    【讨论】:

    • 希望对您有所帮助,或者至少为您指明正确的方向
    • 谢谢,我会立即尝试并告诉你进展如何!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多