我正在使用这个:
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和一个时间戳来避免重放攻击。