有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Jasypt CLI错误操作不可能(输入或参数错误)

我遇到了一个与Command line Jasypt client encryption 'Operation not possible'相同的问题,但是这篇文章是针对一个更旧版本的Java

我已经检查了java的路径(在下面的java_主页中),并查看了lib\security\policy\unlimited文件夹和必要的文件。jar文件,但我仍然得到下面的错误

虽然它可能有关联,也可能没有关联,但我无法让arg ivGeneratorClassName=RandomIvGenerator工作,这几乎同样让我发疯。它抛出了一个ClassNotFound异常,但由George the class org创建。贾斯普特。当我在Eclipse中展开它时,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);
}

编辑:这似乎与正在执行的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);
}

共 (1) 个答案

  1. # 1 楼答案

    我也有同样的问题,你在帖子中引用的第二个答案(Command line Jasypt client encryption 'Operation not possible')解决了这个问题

    I faced this problem because of some lack of information in the Jasypt CLI usage description.

    The default generator to generate the initial value is NoIvGenerator. For some/most algorithms the IV generated this way is not valid, so the error message above is displayed. You have to add the additional parameter ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator to make it work.

    See: https://github.com/jasypt/jasypt/issues/8