Encryption 验证头加密的坏主意?

Encryption 验证头加密的坏主意?,encryption,blowfish,encryption-symmetric,Encryption,Blowfish,Encryption Symmetric,我正在使用加密(河豚对称)发送数据包。从安全的角度来看,在数据包的开头有一个头部(它也与数据包的其余部分一起加密),我可以用它来验证数据包是否有效,这是一个坏主意吗 伪代码示例: byte[] verificationHeader = [1,2,3,4,5]; receive(packet); unencrypt(packet); if (packet.getData().beginswith(verificationHeader)) { // assume packet is good,

我正在使用加密(河豚对称)发送数据包。从安全的角度来看,在数据包的开头有一个头部(它也与数据包的其余部分一起加密),我可以用它来验证数据包是否有效,这是一个坏主意吗

伪代码示例:

byte[] verificationHeader = [1,2,3,4,5];
receive(packet);
unencrypt(packet);
if (packet.getData().beginswith(verificationHeader)) {
   // assume packet is good, try to do something with it
} else {
   // drop packet
}
我想验证它,因为任何其他应用程序都可能在我的组中广播,我不想与其他内容混淆

它有可能帮助黑客解密我的数据包吗


如果这是一个坏主意,那么你能提出一个替代方案吗?

至少在理论上,这是一个相当坏的主意——它给进行暴力攻击的人一个已知的“目标”,所以当/如果他们得到正确的钥匙,他们就会知道(并且很快知道)


至少从安全性的角度来看,最好将该部分保留为明文。它也可能更实用——如果它没有任何用处的话,它可以避免你解密一些东西。

我不确定这是不是一个坏主意,但如果你决定是这样的话,也许你可以发送一个随机数,然后是随机数或是带有标题的。然后在另一边,你或那个数字与随机数再次。那么你不会多次发送同一个东西,但是它都是加密的,所以不能被破解。我认为我的数学是对的,但这个想法还是成立的

ie
value = random | header;
send (random, value);
header = random | value;

但是,如果黑客将验证放入一个数据包中,而数据包的其余部分是垃圾,那么我的代码将试图对其进行处理。。。那就是bad@JackAllan:听起来你想要的是一个消息身份验证码(MAC)。我很确定谷歌应该找到一些相当安全的方法来实现这一点。