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

如何使用JCE中的PBEWITHHMACSHA256ANDAES_256算法

连厉刚
2023-03-14

我想在Java8中使用来自SunJCE提供程序的PBEWITHMACSHA256ANDAES_256算法。

看起来JAR和所有配置在Java8中都是现成的,但我不能使用pbeWithHMACSHA256andaes_256算法。

我有两个罐子:

jdk1.8.0_40\jre\lib\jce.jar
jdk1.8.0_40\jre\lib\ext\sunjce_provider.jar

jdk1.8.0_40\jre\lib\security\java.security中有这个条目

security.provider.5=com.sun.crypto.provider.SunJCE

jdk1.8.0_40\jre\lib\security\java.policy中有这个条目

grant codeBase "file:${{java.ext.dirs}}/*" {
    permission java.security.AllPermission;
};

调用security.getProviders()时,可以在数组中看到com.sun.crypto.provider.sunjce

但是下面的代码抛出EncryptionOperationNotPossibleException

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.jasypt.exceptions.EncryptionOperationNotPossibleException;
import org.junit.Assert;
import org.junit.Test;

public class EncryptionTest {
    @Test
    public void test() {
        SimpleStringPBEConfig pbeConfig = new SimpleStringPBEConfig();
        pbeConfig.setAlgorithm("PBEWITHHMACSHA256ANDAES_256");
        pbeConfig.setPassword("changeme");
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setConfig(pbeConfig);

        String encrypted = encryptor.encrypt("foo");
        String decrypted = encryptor.decrypt(encrypted);
        Assert.assertEquals("foo", decrypted);
    }
}

例外情况

org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an exception. A possible cause is you are using strong encryption algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine
    at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.handleInvalidKeyException(StandardPBEByteEncryptor.java:999)
    at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.encrypt(StandardPBEByteEncryptor.java:868)
    at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:642)
    at foo.bar.EncryptionTest.test(EncryptionTest.java:40)

知道为什么PBEWITHHMACSHA256ANDAES_256抛出EncryptionOperationNotPossibleException吗?

共有1个答案

南门嘉
2023-03-14

例外情况提到:

加密引发异常。一个可能的原因是您使用的是强加密算法,而您没有在此Java虚拟机中安装Java加密扩展(JCE)无限强权限策略文件

这个答案只是试图解决这个问题。我写了另一个答案来帮助下面的问题,因为这是完全不同的。

在那里,备份local_policy.jarus_export_policy.jar

现在,从下载到该文件夹的zip文件中解压local_policy.jarus_export_policy.jar文件,并重新启动应用程序。您的应用程序现在可以访问无限强度的JCE功能

如果有任何问题,请将这两个文件还原到它们的备份版本。

请注意,每个必须运行此代码的JVM都必须以这种方式“打补丁”。

 类似资料:
  • 你能帮我指出什么是默认的RSA填充吗。 准确地说,如果我按照下面的方式创建密码实例,那么肯定java使用了某种填充,因为加密文本字节长度对于2048个RSA密钥总是显示为256字节,而不管纯文本是1个字符还是10个字符。

  • JCE

    JCE (Joomla Content Editor) 是专为 Joomla 提供的所见即所得的HTML编辑器。

  • JCE taglib 是一个用于加密和处理表达式语言的JSP标签库。 示例代码: <jce:pbeencrypt value="please encrypt this text" .../> <jce:pbeencrypt var="mySess" scope="session" ...>please encrypt this text</jce:pbeencrypt> <jce:pbeencry

  • 我试图在Bash脚本中划分两个图像宽度,但是Bash给了我,结果是: 我确实研究了Bash指南,我知道我应该使用,在互联网上的所有示例中,他们都使用。在中,我试图将同样的东西放入

  • 问题内容: 我正在做一些Java加密,无法找到正确使用PBEWithHmacSHA512AndAES_256算法的方法。 加密似乎可以正常工作,但是我无法正确初始化解密密码。 下面是演示该问题的简短程序。特别是,请参见“问题”注释。 注意:我已经看到了这个非常有用的答案,并且可以使用该方案使事情正常进行,但是我很想知道我在这里做错了什么。 问题答案: // PROBLEM: If I pass “

  • 问题内容: 我有一个包含在byte []中的消息,该消息已用“ RSA / ECB / PKCS1Padding”加密。为了解密它,我创建了一个Cipher c并用 直到现在,我只使用 doFinal() 方法解密了小消息,并返回一个包含已解密字节的byte []。 但是在这种情况下,数据会更大(大约500字节),并且 doFinal() 方法会引发异常(javax.crypto.IllegalB