使用AES 256和SHA-2进行加密



我有一种情况,需要首先使用已经提供的公钥和向量加密消息。同样根据要求,我也需要使用SHA-2。现在,我假设我需要对加密的消息进行散列,然后发送到服务器。我有两个问题与此有关1.对加密消息进行散列是否明智?此外,将加密消息和散列值发送到服务器是个好主意吗?2.我在互联网上做了很多搜索,但每当我试图获得一些将AES 256和SHA-2一起使用的例子时,我实际上都会找到解释两者之间差异的地方。有人能帮我做一些示例代码吗?

提前感谢!!!

让我们先分解一下这些东西。


公钥密码学

允许在密码上使用给定的对(KprivKpub(来加密和解密数据。任何用Kpriv加密的数据只能用Kpub解密,任何用Kpub加密的信息只能用Kpriv解密。

RSA是公钥密码的一个很好的例子。

非对称加密需要非常大的密钥才能确保安全,因此执行起来非常慢!您永远不应该使用非对称密钥加密来加密大量数据。不过,您可以在连接开始时使用它来交换符号密钥Ks


符号密钥密码学

允许在密码上使用Ks来加密和解密数据。

符号密码的一个例子是AES。事实上,AES非常通用,您可以更改许多参数,例如(正如您所提到的(块大小,它可以是128、192或256位AES256是块大小为256位的AES密码。

块大小是针对提供的Ks执行实际加密所使用的大小。请注意,您的数据可能大于块大小(算法仍然有效,它只是重复使用相同的Ks(。简单地重复使用每个块的密钥被称为ECB模式,如果数据重复,则可以揭示模式。另一种选择是使用类似CBCCTR的模式,这些模式还依赖于使用前一块数据并与下一块数据进行异或运算,以消除这种模式。您应该使用什么模式取决于您的数据。

请注意,根据您的密码模式,您最终将需要填充。我想当你问这个问题的时候,你已经很熟悉这个术语了。


加密保证

密码学确实保证加密数据是机密的,但仅此而已。它不提供任何其他保证,例如数据是否真实或是否被篡改。

虽然篡改数据即使在解密后也很可能导致难以理解的文本,但在密码学中,不存在无效明文这回事。因此,您需要一些机制来知道您的数据是否有效。

安全的哈希算法(如SHA(可以帮助您知道解密的数据是否有效。

但是,出于这些目的,您通常不应该直接使用摘要算法。请尝试使用MAC。该MAC可以使用SHA256算法,但MAC和哈希并不完全相同。


如何在实践中做到这一点

如果你想要的只是机密性和篡改检测,你可以使用这样的密码和摘要(或哈希(算法:

E ks(SHA(数据(||数据(

其中E是对称密码,ks是共享对称密钥,SHA(数据(为使用安全哈希算法的数据摘要,|表示串联,>数据则为字节数组。

更安全的方法是:E ks(MAC mk(数据(||数据(

其中mk是MAC的密钥。

现在只需搜索如何";java符号密码";以及";java散列字节数组";并像我上面描述的那样使用这两者。

最新更新