我有一些二进制数据,我想先用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
的一个著名问题,并且正在解决此问题的请求将在进行中:
另请参见: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