为了账号安全,请及时绑定邮箱和手机立即绑定

使用 AES 256 和 SHA-2 加密

使用 AES 256 和 SHA-2 加密

炎炎设计 2021-06-15 17:13:49
我有一种情况,我需要首先使用已经提供的公钥和向量来加密消息。此外,根据要求,我还需要使用 SHA-2。现在,我假设我需要散列加密的消息,然后发送到服务器。我有两个与此相关的问题 1. 散列加密消息是否明智?另外,将加密消息和散列值发送到服务器是个好主意吗?2. 我在互联网上做了很多搜索,但是每当我尝试获取一些将 AES 256 和 SHA-2 结合使用的示例时,我实际上都在解释两者之间的区别的地方。任何人都可以帮我一些示例代码吗?
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

让我们先分解这些东西。



公钥密码学

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


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


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



对称密钥密码术

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


对称密码的一个例子是AES。AES 实际上非常通用,您可以更改许多参数,例如(如您所提到的)Blocksize,它可以是 128、192 或 256 位。AES256是配置为 256 位块大小的 AES 密码。


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


请注意,根据您的密码模式,您最终将需要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”并使用我上面描述的两者。


查看完整回答
反对 回复 2021-06-23
  • 1 回答
  • 0 关注
  • 433 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信