secretkeyfactory不可用(jasypt)

wpx232ag  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(880)

我试图用jasypt1.9.3加密一个字符串,我的jdk版本是1.8.0281。
这是我写的代码:

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上。

xzlaal3s

xzlaal3s1#

该规范缺少带有 setIvGenerator() ,例如:

pooledPBEStringEncryptor.setIvGenerator(new RandomIvGenerator());

默认情况下, NoIvGenerator 使用,这会导致异常,因为算法应用cbc模式,这需要iv。
顺便说一下,默认的盐生成器是 RandomSaltGenerator ,因此这不一定需要用 setSaltGenerator() .
这个 PooledPBEStringEncryptor#encrypt() 方法返回salt(16字节)、iv(16字节)和密文的base64编码串联。
例外 org.jasypt.exceptions.EncryptionOperationNotPossibleException 是在许多错误情况下生成的一般异常,因此没有太大意义,请参见此处。例如,这包括缺少jce无限强度管辖权策略(但似乎已安装在您的系统上)。
完整性:算法被称为 PBEWITHHMACSHA512ANDAES_256 (你自己已经弄清楚了)。 PBEWITHHMACSHA512ANDAES_256 使用pbkdf2从password和salt派生aes-256的32字节密钥。采用hmac/sha512。由于没有显式指定,因此使用默认的迭代计数1000。该算法采用cbc模式进行加密(这就是为什么需要iv)。

相关问题