Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用AES 256和SHA-2进行加密_Java_Encryption - Fatal编程技术网

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

Java 使用AES 256和SHA-2进行加密,java,encryption,Java,Encryption,在这种情况下,我需要首先使用已经提供的公钥和向量对消息进行加密。根据要求,我也需要使用SHA-2。现在,我假设我需要散列加密的消息,然后发送到服务器。我有两个与此相关的问题 1.散列加密消息是否明智?另外,将加密消息和哈希值发送到服务器是一个好主意吗? 2.我在互联网上做了很多搜索,但每当我试图得到一些将AES 256和SHA-2结合使用的例子时,我实际上都会找到解释两者区别的地方。有人能帮我一些示例代码吗 提前感谢 让我们先把东西分解一下 公钥密码 允许在密码上使用给定对(Kpriv,Kpu

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


提前感谢

让我们先把东西分解一下


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

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

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


对称密钥加密 允许在密码上使用Ks来加密和解密数据

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

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

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


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

尽管篡改数据即使在解密后也很可能导致无法理解的文本,但在密码学中,并没有无效的明文。因此,您需要一些机制来知道您的数据是否有效

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

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


如何在实践中做到这一点 如果您只需要保密性和篡改检测,则可以使用密码和摘要(或哈希)算法:

eKS(SHA(数据)|数据)

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

更安全的方法是: eks(macmk(数据)| |数据)

其中mk是MAC的秘密密钥


现在只需搜索如何使用“java符号密码”和“java哈希字节数组”,并使用我上面描述的这两种方法。

“使用SHA-2”是为了什么?您需要更详细地解释这是为了什么以及具体要求是什么。AES和SHA-2都不涉及公钥。事实上,我得到了一个加密密钥和一个向量密钥,使用AES 256,我需要加密一些特定于用户的数据,例如:UserId,然后发送到weblogic服务器。我想问的是,我能用SHA-2哈希技术对加密值UserId进行哈希吗,然后将哈希和加密值都传递给服务器