【问题标题】:duplicating stdin to check the end复制标准输入以检查结尾
【发布时间】:2017-07-07 11:59:45
【问题描述】:

我需要从二进制文件中调用 openssl,我在 popen() 调用中写入了 xml 文本,以调用嵌入 openssl 的脚本

如果我的二进制文件在写入过程中失败,我会遇到问题,openssl 成功结束以写入我的文件,但是当我解码时,我得到一个被截断的文件。

我想在 openssl 调用结束时检查接收到的流是否以“”结尾

上下文:我的二进制文件绝不能写入未加密的文件,我不想 openssl 解码

这里是一个例子,来说明(感谢 cmets,这不是一个有效的陈述,只是一种让你得到一个想法的方法):

echo "blablaf foo bar" | openssl -out file.crypt | grep -E "bar$"

那么,如果 grep 找到了“bar$”,我的 file.crypt 是好的

【问题讨论】:

  • 能否提供代码示例和工作流程图?很难理解你需要什么。
  • 你说得对,我加了一个样本
  • 人们希望openssl 将写入临时文件,并且只有在成功完成写入后自动将其重命名为file.crypt
  • 是的,检查标准输入的结尾是我重命名加密文件的条件,它会转到其他地方
  • 为什么不使用 openssl 命令的返回码?如果$?为 0 则 openssl 命令成功结束

标签: linux bash unix openssl


【解决方案1】:

我找到了适合我需要的解决方案:

我的脚本现在在 openssl 之前使用 tee to tail

tee >(tail -n2 > ${checkfile} ) | /usr/bin/openssl enc -aes-256-cbc -out ${outfile} -e -K ${KEY} -iv ${KEYOPTION}

在只包含 2 行的检查文件中使用我的结束 xml 标记就足够安全了。

正如我提到的,检查 openssl 返回码是不够的,因为我通过 popen 语句写入 openssl。

如果我的二进制文件在他写的时候挂起,似乎流到了 openssl,它找到了他的结束,无论它是真正的结束还是中断的流。 openssl 用截断的内容精细地制作一个有效的加密输出文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多