繁体   English   中英

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

[英]Encryption using AES 256 and SHA-2

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

提前致谢!!!

让我们先分解一下内容。


公钥密码术

允许给定对(Kpriv,Kpub)要在加密用于加密和解密数据。 Kpriv加密的任何数据只能用Kpub解密并用Kpub加密的任何数据只能与Kpriv解密。

RSA是一个很好的众所周知的公钥密码示例。

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


对称密钥密码术

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

对称密码的一个示例是AES AES实际上是如此通用,您可以更改许多参数,例如(如您所述) Blocksize (可以为128位,192位或256位)。 AES256是配置有256位块大小的AES密码。

块大小是针对提供的K进行实际加密所使用的大小。 请注意,您的数据可以大于块大小(该算法仍将起作用,它只会重复使用相同的Ks )。 只需在每个块上重用密钥,就称为ECB模式,如果您的数据重复,则可以显示模式。 一种替代方法是使用诸如CBCCTR之类的模式,这些模式还依赖于使用先前的块数据并与下一个块数据进行XOR运算,以消除此类模式。 您应使用哪种模式取决于您的数据。

请注意,根据您的密码模式,最终将需要padding 我假设当您问这个问题时,您已经对这些术语非常熟悉。


密码学保证

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

尽管即使解密后篡改数据很可能会导致文本难以理解,但在密码学中,没有无效的纯文本之类的东西。 因此,您需要某种机制来知道您的数据是否有效。

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

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


在实践中如何做

如果您只需要机密性和篡改检测,则可以使用加密和摘要(或哈希)算法,如下所示:

E ks(SHA(data)|| data)

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

一种更安全的方法是: E ks(MAC mk(data)|| data)

其中mk是MAC的密钥。

现在,只需搜索如何“ java symetric cipher”和“ java hash byte array”,并使用以上所述的两者即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM