我正在使用这个:
byte[] payload = objectMapper.writeValueAsBytes(contents);
Signature s = Signature.getInstance("SHA256withRSA");
s.initSign(privKey);
s.update(payload);
byte[] sig = s.sign();
然后连接两个字节数组。基本上这应该足以防止任何类型的数据损坏,无论是有意的还是无意的。
最终,事物将在 UDP 数据包中传输,因此我无法保证完整性。但在正常操作中,我真的不期待很多这些。
我能想到包含另一个更便宜的整个哈希的唯一原因是即使在必须检查签名之前也能够丢弃(意外)损坏的数据包。
我想不出任何其他原因……你能吗?
编辑:
更多的上下文。用例明智,我只是在探索。基本思想是找出 UDP 中的加密文件传输。不一定是因为它很有意义,而是因为我可以,而且我已经看到了基于 UDP 的文件传输,我想弄清楚这方面的具体问题。
在我目前的情况下,双方的公钥都是双方都知道的。我在想这应该足以启动一个会话:
A ---- i want to connect (+sig +nonce) -------------------> B
|
A <--- ok, here's a symmetric session key (+sig) ---------- B
这两个可能只是用对方的公钥加密,req/res 可能包含一个 nonce 和一个时间戳以避免重放攻击。