【问题标题】:SecretKeyFactory Not Available (Jasypt)SecretKeyFactory 不可用 (Jasypt)
【发布时间】:2021-07-14 16:19:27
【问题描述】:

我正在尝试使用 Jasypt 1.9.3 加密字符串,而我的 JDK 版本是 1.8.0_281。

这是我写的代码:

Security.setProperty("crypto.policy", "unlimited");
            
if (pooledPBEStringEncryptor == null) {
    
    pooledPBEStringEncryptor = new PooledPBEStringEncryptor();
    
    pooledPBEStringEncryptor.setPassword(encryptionKey);
    pooledPBEStringEncryptor.setAlgorithm("PBEWITHHMACSHA512ANDAES256");
    pooledPBEStringEncryptor.setPoolSize(4);
    pooledPBEStringEncryptor.setSaltGenerator(new RandomSaltGenerator());
}       

encrypted = pooledPBEStringEncryptor.encrypt(cValue);

但是当我运行它时,我得到了错误

Exception in thread "main" java.lang.RuntimeException: Security Error in doEncrypt: org.jasypt.exceptions.EncryptionInitializationException: java.security.NoSuchAlgorithmException: PBEWITHHMACSHA512ANDAES256 SecretKeyFactory not available

我运行了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

当我使用算法 PBEWITHHMACSHA256ANDAES_256 时,我得到一个不同的错误。

Exception in thread "main" java.lang.RuntimeException: Security Error in doEncrypt: org.jasypt.exceptions.EncryptionOperationNotPossibleException

我有点不知所措。

我从 Oracle 下载了无限制的策略 jar 并将它们保存在 JAVA_HOME\jre\lib\security\ 文件夹中。我在 Windows 上。

【问题讨论】:

    标签: java encryption jasypt


    【解决方案1】:

    代码缺少setIvGenerator()的IV生成器规范,例如:

    pooledPBEStringEncryptor.setIvGenerator(new RandomIvGenerator());
    

    默认使用NoIvGenerator,这会导致异常,因为算法应用了CBC模式,需要IV。

    顺便说一下,默认的盐生成器是RandomSaltGenerator,因此不一定需要用setSaltGenerator() 指定。

    PooledPBEStringEncryptor#encrypt() 方法返回盐(16 字节)、IV(16 字节)和密文的 Base64 编码串联。


    异常org.jasypt.exceptions.EncryptionOperationNotPossibleException 是在很多错误情况下都会产生的一般异常,因此意义不大,请参阅here。这包括例如缺少 JCE Unlimited Strength Jurisdiction Policy(但它似乎已安装在您的系统上)。

    为了完整起见:该算法称为PBEWITHHMACSHA512ANDAES_256(您自己已经弄清楚了)。
    PBEWITHHMACSHA512ANDAES_256 使用 PBKDF2 从密码和盐中派生出 AES-256 的 32 字节密钥。应用 HMAC/SHA512。由于未明确指定,因此使用默认的迭代次数 1000。该算法应用 CBC 模式进行加密(这就是需要 IV 的原因)。

    【讨论】:

    • 谢谢。这是一个非常详细的答案。让我坐下来解决它!我会回帖的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多