当前位置: 首页 > 知识库问答 >
问题:

秘密密钥工厂不支持算法"PBEWith HmacSHA256AndDESede"

辛承
2023-03-14

我正在研究Java 1.7-Window 7(64位)。我想获得PBEWithHmacSHA256AndDESede算法的SecretKeyFactory实例和Cipher实例。不幸的是,我只有例外

java.security.NoSuchAlgorithmException: Cannot find any provider supporting PBEWithHmacSHA256AndDESede
at javax.crypto.Cipher.getInstance(Cipher.java:524)

你能告诉我你对这个问题的解决方法吗?

共有3个答案

齐健柏
2023-03-14

正如@user3465651指出的那样,你必须有一个支持这一点的库,比如BouncyCastle。就我而言,错误是:

java.security.NoSuchAlgorithmException: PBEWithSHA256And256BitAES-CBC-BC SecretKeyFactory not available

在故障排除中,您可以通过以下方式显式指定包含算法的库:

SecretKeyFactory.getInstance("PBEWithSHA256And256BitAES-CBC-BC","BC");

如果你这样做了,你可能仍然会得到这个错误,如果你使用Maven的阴影插件:

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC

shade插件会破坏加密签名(解释)。

您可以改为使用可执行打包程序maven插件解决方案,该解决方案使用jar-in-jar方法,该方法将JCE的签名保留在单个可执行jar中。

戎洛华
2023-03-14

你有没有:

    < li >确认您使用的安全提供程序支持“pbewithhmacsha 256 anddesede” < li >您是否安装了无限加密-
澹台浩广
2023-03-14

这个问题的解决方案分为两部分:

首先,您需要调用SecretKeyFactory.getInstance(“PBEWithHmacSHA256AndDESede”),而不是调用Cipher.getInstance(“pbEWithHmacSHA256AndDES”),如堆栈跟踪所示。

其次,您需要找到支持该算法的安全提供程序。顺便说一下,SunJCE和BC 1.50都不支持它,所以您必须搜索更奇特的变体。

可以使用以下代码检查所有已安装的提供程序以及它们支持的密钥工厂算法:

// Security.addProvider( new BouncyCastleProvider() );
for ( Provider provider : Security.getProviders() ) {
    System.out.println( provider );
    for ( Provider.Service service : provider.getServices() ) {
        if ( "SecretKeyFactory".equals( service.getType() ) ) {
            System.out.println( service );
        }
    }
}

BC 1.50绝对支持具有SHA-256和AES变体的PBE,名称为PBEWITHSHA256和128BITAES-CBC-BC(OID 1.3.6.1.4.1.22554.1.2.2.1.2.1.2),PBEWITHSHA256和192BITAES-CBC-BC(OID 1.3.6.1.4.1.22554.1.2.2.1.2.22)和PBEWITHSHA256AND256BITAES-CBC-BC(OID 1.3.6.1.4.1.22554.1.2.2.1.2.1.42)。

它还支持名为PBEWITHHMACSHA256和OID 2.16.840.1.101.3.4.2.1的SecretKeyFactory算法,但该OID指定了普通SHA-256哈希函数,这意味着该秘密工厂将仅使用哈希而不是哈希密码。

 类似资料:
  • 我在.NET Core2.0中创建了一个RSA加密/解密服务,目前我使用密钥库机密来保存RSA密钥。但据我所知,我可以用Key Vault密钥实现这一点,但目前还不能实现,因为KV Keys不支持2048长RSA密钥的加密/解密...这真让我摸不着头脑。 那么,我是否可以使用带有Azure Key Vault密钥的2048密钥来实现RSA加密/解密呢?

  • 我试图使用PBE生成一个密钥,但SecretKeyFactory生成的密钥与输入密码完全相同。我尝试过不同的算法,迭代次数等,但仍然是一样的,所以我觉得我错过了一步。 编辑:如果我使用算法“PBKDF2WithHmacSHA1”,那么生成的密钥与密码不同,但我使用的算法为什么会生成与输入密码完全相同的密钥?

  • 我有一个用秘密定义的Azure密钥库,我可以使用“Azure密钥库”任务在devops构建管道中访问它。现在我需要将秘密变量传递给python内联脚本。 由于它是加密的,python无法直接读取该值。我如何解密并传递它们。这个秘密持有Databricks的访问令牌。我们正在尝试使用DevOps管道创建Databricks集群。 我的Yaml有以下任务 Azure KeyVault Powershe

  • exception.message=“参数:连接字符串:[没有指定连接字符串],资源:https://vault.azure.net,权限异常消息:尝试了以下3种方法来获取访问令牌,但都不起作用。参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:异常消息:试图使用托管服务标识获取令牌。无法连接到托管服务标识(MSI)终结点。请检查您正在运行的Azu

  • 问题内容: 我试图将一个示例项目导入到Eclipse中,并且在运行该应用程序时遇到以下给定的错误。 按照此 SO链接,我已更改了 至 要么 但是没有用。 这是代码: User.java: 从applicationContext.xml: 问题答案: 您可以使用告诉Hibernate使用序列来生成您的ID 这个配置基本上告诉Hibernate使用一个名为ID_SEQ的数据库序列来生成该对象的ID。如

  • 使用AKV管理存储帐户:https://docs.microsoft.com/en-us/Azure/key-vault/key-vault-overview-storage-keys-powershell#manage-storage-account-keys 使用Azure Automation进行密钥循环:https://docs.microsoft.com/en-us/Azure/key-

  • 目前,在我看来,有很多方法可以引用秘密: 使用@或 直接,在存储库中为fx一个名为secret的秘密,然后直接引用它 具有Azure函数,或 配置已运行的应用程序,并将密钥存储库添加到堆栈 我很难看出什么时候用什么。