gpt4 book ai didi

java - 我应该使用哪些 Java 加密算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:31:49 34 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

5年前关闭。




Improve this question




我正在开发一个需要存储静态加密二进制信息的程序。不幸的是,我似乎找不到解释哪种加密方案最适合不同应用程序的资源。

由于加密很复杂而且我不是专家,我决定使用一个名为 Jasypt 的库。它包装了 Java 的内置加密功能。为了弄清楚我可以使用哪些算法,我编写了一些单元测试。

第一个测试调用 Jasypt 的 AlgorithmRegistry.getAllPBEAlgorithms()函数并列出所有可用的加密算法:

PBEWITHHMACSHA1ANDAES_128
PBEWITHHMACSHA1ANDAES_256
PBEWITHHMACSHA224ANDAES_128
PBEWITHHMACSHA224ANDAES_256
PBEWITHHMACSHA256ANDAES_128
PBEWITHHMACSHA256ANDAES_256
PBEWITHHMACSHA384ANDAES_128
PBEWITHHMACSHA384ANDAES_256
PBEWITHHMACSHA512ANDAES_128
PBEWITHHMACSHA512ANDAES_256
PBEWITHMD5ANDDES
PBEWITHMD5ANDTRIPLEDES
PBEWITHSHA1ANDDESEDE
PBEWITHSHA1ANDRC2_128
PBEWITHSHA1ANDRC2_40
PBEWITHSHA1ANDRC4_128
PBEWITHSHA1ANDRC4_40

在运行时,Jasypt 会抛出 EncryptionOperationNotPossibleException如果您尝试使用由于某种原因不受支持或违反 Java 加密规则的算法。有趣的是,如果我尝试使用每个“可用”算法来加密然后解密一些任意数据,并且只打印出不抛出该异常的那些,我会得到这个精简列表:
PBEWITHMD5ANDDES
PBEWITHSHA1ANDDESEDE
PBEWITHSHA1ANDRC2_128
PBEWITHSHA1ANDRC2_40
PBEWITHSHA1ANDRC4_128
PBEWITHSHA1ANDRC4_40

可以通过拉入 BouncyCastle 来扩展可用算法的列表。 JCE 并通过执行 Security.addProvider(new BouncyCastleProvider()) 注册它.如果我在这样做之后重复之前的测试,我会得到一个更大的算法列表可供选择:
PBEWITHMD2ANDDES
PBEWITHMD5AND128BITAES-CBC-OPENSSL
PBEWITHMD5AND192BITAES-CBC-OPENSSL
PBEWITHMD5AND256BITAES-CBC-OPENSSL
PBEWITHMD5ANDDES
PBEWITHMD5ANDRC2
PBEWITHSHA1ANDDES
PBEWITHSHA1ANDDESEDE
PBEWITHSHA1ANDRC2
PBEWITHSHA1ANDRC2_128
PBEWITHSHA1ANDRC2_40
PBEWITHSHA1ANDRC4_128
PBEWITHSHA1ANDRC4_40
PBEWITHSHA256AND128BITAES-CBC-BC
PBEWITHSHA256AND192BITAES-CBC-BC
PBEWITHSHA256AND256BITAES-CBC-BC
PBEWITHSHAAND128BITAES-CBC-BC
PBEWITHSHAAND128BITRC2-CBC
PBEWITHSHAAND128BITRC4
PBEWITHSHAAND192BITAES-CBC-BC
PBEWITHSHAAND2-KEYTRIPLEDES-CBC
PBEWITHSHAAND256BITAES-CBC-BC
PBEWITHSHAAND3-KEYTRIPLEDES-CBC
PBEWITHSHAAND40BITRC2-CBC
PBEWITHSHAAND40BITRC4
PBEWITHSHAANDIDEA-CBC
PBEWITHSHAANDTWOFISH-CBC

不幸的是,现在我不知道这些算法中的哪一个最适合我的应用程序。我有一个暗示 AES 是正确的方法,它看起来像 PBEWITHSHA256AND256BITAES-CBC-BC是具有最长 key 长度的 AES 实现,但我不知道去哪里确认这种怀疑。

这些方案中哪些可以提供最高的安全级别,哪些有明显的安全问题?

编辑:我希望能够在不需要最终用户安装无限加密文件的情况下分发我的代码,因为这几乎肯定超出了不那么精通技术的用户的能力。我真正想要的是在不使用无限强度管辖文件的情况下可以获得的最强大的加密。

最佳答案

首先,您应该从 Oracle 安装无限制的加密文件。这样做后,您应该有更少的 EncryptionOperationNotPossibleException s 和更高的安全级别应该可用。

此外,对于可能的最高级别加密,我根本不会使用 JaSypt,因为 it doesn't seem to provide any integrity checking or authentication of ciphertext .只是为了保密,这似乎无关紧要。但在实践中,您需要根据您的威胁模型进行检查。

如果您决定使用 JaSypt(我个人不喜欢它),您可能应该选择 PBEWITHHMACSHA512ANDAES_256作为最高级别的可能性。确保您了解 PBKDF2 和工作因素(迭代次数,例如 setKeyObtentionIterations

你不需要充气城堡。 AES 被认为是安全的; Bouncy CaSTLe 所做的所有事情——例如你使用 JaSypt 的例子——正在添加晦涩的密码。在上面的列表中,除 AES 之外的所有内容都没有 AES 安全。

关于java - 我应该使用哪些 Java 加密算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685679/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com