GPG:在一定时间内对管道中的数据进行加密,然后停止

恶作剧

我们有以下情况:我们想从类似文件的流(/dev/ttyACM0,所以是串行接口)中获取数据,并使用gpg对其进行加密。目前,我们使用

cat /dev/ttyACM0 | gpg -e -r [keyid] --trust-model always > output_file

我们的问题是:ttyACM0将在一定时间内传送数据,然后停止,但是ttyACM0本身将保留在原位,因此读取将继续并且gpg不会终止。如果我们使用超时(timeout [time] cat /dev/ttyACM0 | gpg ... &)来运行整个过程,并让超时终止进程,则某些数据将丢失,并且在解密时,我们会收到一条错误消息:

gpg: block_filter 0x00005589367a73c0: read error (size=16358,a->size=16358)
gpg: block_filter 0x00005589367aab80: read error (size=13254,a->size=13254)
gpg: WARNING: encrypted message has been manipulated!
gpg: block_filter: pending bytes!
gpg: block_filter: pending bytes!

解密是可行的,但是最后缺少一些数据。这可能与GPG以非空缓冲区终止的事实有关。

我们如何在不因gpg缓冲而丢失某些数据的情况下使它起作用?我不知道有任何SIGXXX使gpg完成操作,写出结果然后终止。该过程应在Raspberry Pi Zero上运行,因此理想情况下,它不应在常规加密上引入大量开销,并且出于合规性原因,我们不能先将所有内容传输到文件中并随后对其进行加密,我们需要在收到文件后直接对其进行加密从串行接口。

阿蒂

如果将放在timeout管道的中间,gpg则将干净地退出:

cat /dev/ttyACM0 | timeout ${TIMEOUT} cat | gpg -e -r ${RECIPIENT} > ${OUT_FILE}

我无法完全解释这一点,但是我相信这是由于处理/传播管道错误(信号)的方式引起的。

注意:问这个问题是为了更好地理解这一点。


请注意,即使使用以下内容也会失败:

$ timeout 5 cat < /dev/urandom | gpg -e -r ${RECIPIENT} > myfile.gpg

gpg: Terminated caught ... exiting
Terminated

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在一定时间内运行一个命令,退出,然后运行

来自分类Dev

在一定时间内终止进程的逻辑

来自分类Dev

在一定时间内显示通知消息

来自分类Dev

在一定时间内运行循环的最佳方法

来自分类Dev

在一定时间内重启systemd服务

来自分类Dev

在一定时间内没有收到数据后断开套接字

来自分类Dev

如果未在一定时间内执行任务,则如何为任务设置时间限制,然后将其移至芹菜中

来自分类Dev

我想在一定时间内将 Firebase 数据库上的值设置为 True

来自分类Dev

如何在一定时间内(10秒)自动在php中显示下一页?

来自分类Dev

有一种方法可以在一定时间内禁用方法吗?

来自分类Dev

如何在一定时间内更改变量

来自分类Dev

如果在一定时间内没有响应,请跳过

来自分类Dev

Z3Opt:在一定时间内找到次优模型?

来自分类Dev

如何定期和一定时间内的运行作业

来自分类Dev

最短的计时器间隔,可以在一定时间内将值加到100

来自分类Dev

如何在python中使Tkinter在一定时间内完成每个代码?

来自分类Dev

如何在一定时间内暂停进程?

来自分类Dev

如何列出在一定时间内更改的文件?

来自分类Dev

如何在一定时间内循环执行此功能?

来自分类Dev

如何让python等待输入直到输入在一定时间内保持不变

来自分类Dev

如果按下按钮,如何在一定时间内显示图像

来自分类Dev

如何防止我的用户在一定时间内做某事

来自分类Dev

如何使Label在特定时间内可见,然后在JavaFX中不可见?

来自分类Dev

Unity2D:如何在一定时间内锁定游戏,就像糖果迷一样

来自分类Dev

如何知道iOS应用在一定时间内没有收到触摸事件

来自分类Dev

Love2D在给定时间内旋转图像,直到达到一定角度

来自分类Dev

SQL选择两个不同名称在一定时间内相互匹配的位置

来自分类Dev

除非用户在python中提供输入,否则如何创建在一定时间内激活的功能

来自分类Dev

在恒定时间内查找堆栈中的最小元素

Related 相关文章

  1. 1

    在一定时间内运行一个命令,退出,然后运行

  2. 2

    在一定时间内终止进程的逻辑

  3. 3

    在一定时间内显示通知消息

  4. 4

    在一定时间内运行循环的最佳方法

  5. 5

    在一定时间内重启systemd服务

  6. 6

    在一定时间内没有收到数据后断开套接字

  7. 7

    如果未在一定时间内执行任务,则如何为任务设置时间限制,然后将其移至芹菜中

  8. 8

    我想在一定时间内将 Firebase 数据库上的值设置为 True

  9. 9

    如何在一定时间内(10秒)自动在php中显示下一页?

  10. 10

    有一种方法可以在一定时间内禁用方法吗?

  11. 11

    如何在一定时间内更改变量

  12. 12

    如果在一定时间内没有响应,请跳过

  13. 13

    Z3Opt:在一定时间内找到次优模型?

  14. 14

    如何定期和一定时间内的运行作业

  15. 15

    最短的计时器间隔,可以在一定时间内将值加到100

  16. 16

    如何在python中使Tkinter在一定时间内完成每个代码?

  17. 17

    如何在一定时间内暂停进程?

  18. 18

    如何列出在一定时间内更改的文件?

  19. 19

    如何在一定时间内循环执行此功能?

  20. 20

    如何让python等待输入直到输入在一定时间内保持不变

  21. 21

    如果按下按钮,如何在一定时间内显示图像

  22. 22

    如何防止我的用户在一定时间内做某事

  23. 23

    如何使Label在特定时间内可见,然后在JavaFX中不可见?

  24. 24

    Unity2D:如何在一定时间内锁定游戏,就像糖果迷一样

  25. 25

    如何知道iOS应用在一定时间内没有收到触摸事件

  26. 26

    Love2D在给定时间内旋转图像,直到达到一定角度

  27. 27

    SQL选择两个不同名称在一定时间内相互匹配的位置

  28. 28

    除非用户在python中提供输入,否则如何创建在一定时间内激活的功能

  29. 29

    在恒定时间内查找堆栈中的最小元素

热门标签

归档