Python:使用openssl via subprocess用可变密码解密

时间:2017-10-04 15:26:07

标签: python encryption openssl

我正在尝试使用子进程通过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"]
)

2 个答案:

答案 0 :(得分:0)

我已经使用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))

答案 1 :(得分:0)

使用字符串插值

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

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