我遇到了与Command line Jasypt client encryption 'Operation not possible'相同的问题,但是该帖子是针对Java的较旧版本的。
我已经检查了列出的java路径(在下面的java_home中,并看到带有必需的.jar文件的lib \ security \ policy \ unlimited文件夹,但仍然出现以下错误。
虽然可能相关,也可能不相关,但我无法使arg ivGeneratorClassName = RandomIvGenerator正常工作,这几乎使我发疯。它引发了ClassNotFound异常,但是当我在Eclipse中扩展它时,乔治提供了org.jasypt.iv.RandomIvGenerator类。
jasypt输出:
C:\jsypt\bin>encrypt.bat input=SomeVeryLongPassword password=MixItUpALot algorit
hm=PBEWITHHMACSHA256ANDAES_256
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) Client VM 25.171-b11
----ARGUMENTS-------------------
algorithm: PBEWITHHMACSHA256ANDAES_256
input: SomeVeryLongPassword
password: MixItUpALot
----ERROR-----------------------
Operation not possible (Bad input or parameters)
算法列表(格式略为可读):
C:\jsypt\bin>listAlgorithms.bat
DIGEST ALGORITHMS: [MD2, MD5, SHA, SHA-224, SHA-256, SHA-384, SHA-512]
PBE ALGORITHMS: [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]
Java版本:
C:\jsypt\bin>java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) Client VM (build 25.171-b11, mixed mode, sharing)
Java主页:
C:\jsypt\bin>set JAVA_HOME
JAVA_HOME=C:\Program Files (x86)\Java\jre1.8.0_171
快速运行下面的程序会产生:2147483647,表示启用了无限制。所以我完全迷路了。
try {
int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES");
System.out.println(maxKeyLen);
} catch (Exception e) {
System.out.println(e);
}
EDIT:这似乎与正在执行的CLI有关。将下面的代码与示例用法结合在一起(更改算法),它可以生成加密的密码。下面是我的替代方法,但是我希望能够通过CLI执行此操作,因为在应该更改密码的情况下,无需每90天编辑/编译/运行一次此操作。
try {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("jasypt"); // could be got from web, env variable...
encryptor.setAlgorithm("PBEWITHHMACSHA256ANDAES_256");
encryptor.setIvGenerator(new RandomIvGenerator());
String encrypted = encryptor.encrypt("ThisisaATest");
System.out.println(encrypted);
} catch (Exception e) {
System.out.println(e);
}
我有同样的问题,您所引用的帖子(Command line Jasypt client encryption 'Operation not possible')中的第二个答案已解决。
由于在Jasypt CLI使用说明中缺少一些信息,所以我遇到了这个问题。
用于生成初始值的默认生成器是NoIvGenerator。对于某些/大多数算法,以这种方式生成的IV无效,因此将显示上面的错误消息。您必须添加其他参数ivGeneratorClassName = org.jasypt.iv.RandomIvGenerator使其起作用。