使用bash中的qrencode和zbarimg在qr码中编码/解码二进制数据

问题描述 投票:1回答:1

我有一些二进制数据,我想先用qr码进行编码,然后再将其解码,然后全部用bash进行编码。搜索后,看起来我应该使用qrencode进行编码,而使用zbarimg进行解码。经过一些故障排除后,我仍然无法解码已编码的内容

知道为什么吗?目前最接近解决方案的是:

$ dd if=/dev/urandom bs=10 count=1 status=none > data.bin
$ xxd data.bin
00000000: b255 f625 1cf7 a051 3d07                 .U.%...Q=.
$ cat data.bin | qrencode -l H -8 -o data.png
$ zbarimg --raw --quiet data.png | xxd
00000000: c2b2 55c3 b625 1cc3 b7c2 a051 3d07 0a    ..U..%.....Q=..

看起来好像我不太远,但是仍然有问题。

Edit 1:这需要使用base64包装,才能正常工作,如接受的答案所述。

Edit 2:使用base64编码会使消息的大小加倍。首先使用二进制文件的原因是为了节省大小,因此我想避免这种情况。抱歉,我不接受答案,很抱歉。

Edit 3:从2020年3月3日开始,这似乎是zbarimg的一个著名问题,并且正在解决此问题的请求将在进行中:

https://github.com/mchehab/zbar/pull/64

bash binary decode qr-code encode
1个回答
1
投票

另请参见:Storing binary data in QR codes

看起来zbarimg仅支持可打印字符并添加换行符

printf '%s' 'Hello World!' >data.bin
xxd data.bin
qrencode -l H -8 -o data.png -r data.bin
zbarimg --raw --quiet data.png | xxd

我认为更好的可移植选项是在qr编码之前对base64二进制数据进行编码。

喜欢这个:

dd if=/dev/urandom bs=10 count=1 status=none > data.bin
xxd data.bin
base64 <data.bin | qrencode -l H -8 -o data.png
zbarimg --raw --quiet data.png | base64 -d | xxd
© www.soinside.com 2019 - 2024. All rights reserved.