首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用AES 256和SHA-2加密

用AES 256和SHA-2加密
EN

Stack Overflow用户
提问于 2018-08-01 21:22:06
回答 1查看 3.5K关注 0票数 0

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

提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-01 22:32:08

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

公钥密码学

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

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

为了安全起见,非对称加密需要非常大的密钥,因此执行非常慢!您不应使用异步密钥加密技术对大量数据进行加密。不过,您可以在连接开始时使用它来交换一个系统密钥Ks。

系统密钥密码学

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

系统密码的一个例子是AES。事实上,AES是如此的多才多艺,您可以更改许多参数,例如,(正如您提到的)块大小,可以是128、192或256位。AES256是用256个比特的块大小配置的AES密码。

块大小是用来对提供的Ks执行实际加密的。请注意,您的数据可以大于块大小(算法仍然有效,它只是重复使用相同的Ks)。简单地重用键,每个块被称为欧洲央行模式,如果你的数据是重复的,它可以显示模式。另一种方法是使用CBC或CTR等模式,这些模式也依赖于使用以前的块数据和XORing与下一个块数据,以消除这种模式。您应该使用何种模式取决于您的数据。

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

密码担保

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

虽然篡改数据很可能导致无法理解的文本,甚至在解密之后,在密码学中,不存在无效的明文。因此,您需要某种机制来了解您的数据是否有效。

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

然而,出于这些目的,您通常不应该直接使用Digest算法。尝试使用MAC。该算法可以使用SHA256算法,但是MAC算法和散列算法并不完全相同。

如何在实践中做到这一点

如果您想要的只是机密性和篡改检测,您将使用密码和摘要(或哈希)算法:

E (SHA(数据)\x{e76f}数据)

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

一种更安全的方法是:E ( MAC (数据)\x{e76f}\x{e76f}

其中mk是MAC的秘密密钥。

现在,只需搜索如何"java系统密码“和"java散列字节数组”,并使用这两个,正如我前面描述的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51642434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档