2017-02-18 171 views
1

首先我是密码学的新手。 假设我使用AES 128位加密对简单测试进行加密并传递给接收方。密钥也传递给接收器。在接收端,如果没有完全解密消息,我怎么才能检查KEY是否正确。 我的意思是,我们可以检查这样如何知道AES加密密钥在接收端是否正确?

IF(KEY==something) 

     DECRYPT 

ELSE 

     NOT a correct key. 

有什么关系IV? 我真的不明白IV是什么。

+0

请注意,不直接涉及编程的密码学特定问题最好在[crypto sister site](http://crypto.stackexchange.com) –

回答

4

首先,通过一个不安全的通道传递密文和密钥,你可能会认为是不安全的。将密文和密钥保存在同一个地方与保持明文一样,所以不要这样做。

而不是确定给定的密钥是否正确的密文,密码系统,而不是确定密文在他们甚至解密之前是否合法。最常见的方法是使用MAC或消息认证码。 HMAC是一种常见的方法,像GCM这样的Authenticated block模式也是如此。

最后,使用IV来确保重复的明文块不会导致重复的密文块。例如。在不使用IV的ECB模式下,每个相同的明文块将在给定的密钥下加密成相同的密文。应用IV(像CBC这样的模式)将确保由于从IV开始的链式异或操作,相同的明文块看起来不同。

要解决您的问题,请使用GCM模式或使用KDF派生HMAC的对称密钥和密钥。

+1

[Here's](http://stackoverflow.com/a/ 34157326/1816580)Java特有的答案。 –