首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数字信封routines:EVP_DecryptFinal_ex:bad解密

数字信封routines:EVP_DecryptFinal_ex:bad解密
EN

Stack Overflow用户
提问于 2019-05-26 14:58:40
回答 1查看 5.3K关注 0票数 0

我正在尝试制作一个运行OpenSSL命令的Python程序,用于对文件进行加密和解密。

在命令行中,我做了:

代码语言:javascript
复制
vagrant@vagrant:~$ openssl enc -aes256 -base64 -k $(base64 alice_shared_secret.bin) -e -in plain.txt -out cipher.txt
vagrant@vagrant:~$ openssl enc -aes256 -base64 -k $(base64 bob_shared_secret.bin) -d -in cipher.txt -out plain_again.txt

而且它是有效的。但是,如果我用Python程序加密文本,我就无法解密。

代码语言:javascript
复制
vagrant@vagrant:~$ openssl enc -aes256 -base64 -k $(base64 bob_shared_secret.bin) -d -in cipher.txt -out plain_again.txt
bad decrypt
140321401345688:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:529:

我的程序和命令行的密码有什么区别?

代码:

代码语言:javascript
复制
#!/System/Library/Frameworks/Python.framework/Versions/2.6/bin/python
openssl         = '/usr/bin/openssl'
from subprocess import Popen, PIPE, STDOUT

def encrypt():
  arguments = [
    openssl,
    'enc',
    '-aes256',
    '-base64',
    '-k',
    '$(base64 alice_shared_secret.bin)',
    '-e', 
    '-in',
    'plain.txt',
    '-out',
    'cipher.txt',
  ]

  execute = Popen(arguments, stdout=PIPE)
  out, err = execute.communicate()

encrypt()

有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-26 20:46:33

AFAIK您不能使用来自Popen参数的shell字符串插值(您的“$(.)”表达)。尝试直接对base64数据进行编码,它将很好地工作:

代码语言:javascript
复制
import base64

with open('secret.bin') as x: secret = x.read()

def encrypt():
  arguments = [
    openssl,
    'enc',
    '-aes256',
    '-base64',
    '-k',
    base64.b64encode(secret),
    '-e', 
    '-in',
    'plain.txt',
    '-out',
    'cipher.txt',
  ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56314626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档