Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 寻找强密钥加密/解密算法,该算法将;大声地说;损坏或修改的数据失败?_Java_Encryption_Public Key Encryption - Fatal编程技术网

Java 寻找强密钥加密/解密算法,该算法将;大声地说;损坏或修改的数据失败?

Java 寻找强密钥加密/解密算法,该算法将;大声地说;损坏或修改的数据失败?,java,encryption,public-key-encryption,Java,Encryption,Public Key Encryption,我正在寻找一种强密钥加密算法,它有一个附加功能,即当加密文件被破坏或篡改时,它会“大声”失败;i、 它将失败并告诉我,而不是产生垃圾作为解密输出 理想情况下,它是Java的标准配置。AES会这样做吗 谢谢, 卡斯滕 PS>我知道我可以通过在加密文件上额外计算散列来手动执行此操作,但我希望避免这样做 [编辑:删除了“public/private”,因为这对我来说并不是必需的,而且正如人们指出的那样不一致]您可能应该查看PKCS#7,它也在S/MIME中使用。它支持强加密和身份验证,并通过许多实现库

我正在寻找一种强密钥加密算法,它有一个附加功能,即当加密文件被破坏或篡改时,它会“大声”失败;i、 它将失败并告诉我,而不是产生垃圾作为解密输出

理想情况下,它是Java的标准配置。AES会这样做吗

谢谢, 卡斯滕

PS>我知道我可以通过在加密文件上额外计算散列来手动执行此操作,但我希望避免这样做


[编辑:删除了“public/private”,因为这对我来说并不是必需的,而且正如人们指出的那样不一致]

您可能应该查看PKCS#7,它也在S/MIME中使用。它支持强加密和身份验证,并通过许多实现库广泛使用和可用。这将是一个很好的Java选项。

您可能应该查看PKCS#7,它也用于S/MIME。它支持强加密和身份验证,并通过许多实现库广泛使用和可用。这将是一个很好的Java选项。

您说过您希望使用公钥/私钥算法,因此具有不对称性。例如,RSA加密使用PKCS#1填充。如果使用
Cipher.getInstance(“RSA”)
此填充是默认的。如果解密失败,填充很可能会损坏。在java中,您将获得BadPaddingException

然而我强烈建议使用散列(甚至是快速MD5)或简单的控制和来代替。看。IPsec使用对称加密(DES)和HMAC(使用哈希的消息身份验证代码)——一种使用加密哈希函数的消息身份验证机制。也许,如果您不需要隐藏数据,您应该只使用HMAC

我猜你不需要加密,但需要数字签名。事实上,数字签名是消息的加密(使用私钥)散列。验证是对该散列的解密,并与从明文消息计算的数据进行比较


如果您提供更详细的说明,我们可以帮助您找到最佳解决方案。

您说过要使用公钥/私钥算法,以实现不对称性。例如,RSA加密使用PKCS#1填充。如果使用
Cipher.getInstance(“RSA”)
此填充是默认的。如果解密失败,填充很可能会损坏。在java中,您将获得BadPaddingException

然而我强烈建议使用散列(甚至是快速MD5)或简单的控制和来代替。看。IPsec使用对称加密(DES)和HMAC(使用哈希的消息身份验证代码)——一种使用加密哈希函数的消息身份验证机制。也许,如果您不需要隐藏数据,您应该只使用HMAC

我猜你不需要加密,但需要数字签名。事实上,数字签名是消息的加密(使用私钥)散列。验证是对该散列的解密,并与从明文消息计算的数据进行比较


如果您提供更详细的说明,我们可以帮助您找到最佳解决方案。

如果您想要数据的真实性,那么您可以在数据上应用MAC(消息验证码)或数字签名

使用非对称公钥/私钥的可行解决方案是将您的数据包装在SignedData中,而SignedData本身就是EnvelopedData的有效负载(参见)

如果有人篡改内容,签名数据上的签名验证将失败

如果不想涉及非对称密钥,另一种实现目标的标准化方法是使用同一RFC中描述的AuthenticatedData结构。有效载荷将是您已经加密的数据,MAC将额外确保完整性和真实性,如果内容被篡改,同样会明显失败


这里使用CMS这样的标准的优点是a)已经存在支持这些现成功能的库,b)您可以依赖经过测试和分析的东西,因此您不会冒着创建不安全的东西的风险,这些东西太容易发生

如果您希望数据的真实性,则可以在数据上应用MAC(消息身份验证码)或数字签名

使用非对称公钥/私钥的可行解决方案是将您的数据包装在SignedData中,而SignedData本身就是EnvelopedData的有效负载(参见)

如果有人篡改内容,签名数据上的签名验证将失败

如果不想涉及非对称密钥,另一种实现目标的标准化方法是使用同一RFC中描述的AuthenticatedData结构。有效载荷将是您已经加密的数据,MAC将额外确保完整性和真实性,如果内容被篡改,同样会明显失败


这里使用CMS这样的标准的优点是a)已经存在支持这些现成功能的库,b)您可以依赖经过测试和分析的东西,因此您不会冒着创建不安全的东西的风险,这些东西太容易发生

我几乎可以肯定,任何对内容敏感的加密系统(以您想要的方式)都会泄漏太多的信息,而不是好的加密

我们有专门的、特定于关注点的算法的原因正是出于这个原因(imo)

对于您来说,提供一个在(复合)纯文本中包含消息摘要的接口,然后应用加密应该是一件小事。解密时,您的简单包装器将查找(固定的)n字节内容(在复合纯文本中的某处)

e、 g.对其进行加密:

   +--------------+----------------//----------+
   | digest bytes | content (plain-text)       |
   +--------------+----------------//----------+