我正在寻找类似"倒置非对称加密技术"并遇到了一个great post,它实际上涵盖了我需要的东西。
我希望我的应用程序的每个用户都有一个公钥,允许他们解密隐藏在用我的私钥加密的QR码中的消息。我想确保我的系统不会被覆盖我的假QR码欺骗。接受的答案建议使用数字签名,所以我用Google搜索Java tutorial,显示如何使用该功能。
这有点误会了。我认为使用数字签名会有一个简单的情况(让我们称之为Situation A
):
但是,我的理解是数字签名更像是:
我在这儿吗?如果是这样,我如何将我的消息和签名放在QR码中?在Situation A
的情况下,事情看起来很简单,因为我可以使用Base64对加密的消息进行编码,并将结果放在QR码中。但是,如果不使用像encode message, encode signature, put them in one file, encode it, put the result in the code
这样的技巧,我似乎无法做同样的事情。那我该怎么办呢?
哦,还有answer from question "QR code security"说:
您可以将任何想要的内容放入QR码中,包括代表签名文档的Base-64编码字节。没有读者会知道如何处理它;您必须编写一个自定义应用程序,扫描然后知道对其进行解码并采取相应措施。
根据前面提到的教程,看起来签名文档本身是不够的。
答案 0 :(得分:1)
当我问这个问题时,我认为有一些好习惯或类似的东西。由于没有提供,我决定使用我自己的解决方案,有点类似于DarkSquirrel42的建议。
我创建了自己的编码器和解码器。实际上,我使用完全我在原帖中描述的相同技巧。
将两个字符串合并为一个字符串,如下所示
base64(message)-base64(signature)
Base64()上面的字符串如下:
base64(base64(message)-base64(signature))
将该编码字符串放入QR码中。
message
和signature
部分(这就是 3中连字符的原因。)然后如果签名正确,我将消息传递给适当的处理程序。答案 1 :(得分:0)
请注意,如果您在...之前处理小邮件,您的邮件大小会显着增加。
签名与额外的文件无关......你可以完美地计算它们并在只处理文本时使用它们......
例如,PGP会这样做......-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
<your message here>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
<some base64 encoded data holding the signature>
-----END PGP SIGNATURE-----
现在,你不必像pgp一样完成它,但是,你需要的只是一些结构来分辨消息和签名......
例如,如果您知道您的消息可能不长,只需定义前2个字节定义消息长度,并在前面添加....
如果你愿意,下一步可以在base64编码整个东西,你知道怎么去那里