Linux跑jar包发生报错,提示如下:
Invocation of init method failed;
nested exception is org.jasypt.exceptions.EncryptionInitializationException:
java.security.NoSuchAlgorithmException:PBEWithMD5AndDES SecretKeyFactory not available
从提示内容看到是某些加密算法没找到
测试一下
Set<String> ciphers = Security.getAlgorithms("Cipher");
for (String cipher : ciphers) {
System.out.println(cipher);
}
Windows + IDE环境下跑程序,控制台输出
PBEWITHHMACSHA384ANDAES_128
AES_256/GCM/NOPADDING
AES_192/GCM/NOPADDING
PBEWITHHMACSHA512ANDAES_128
AES_256/CBC/NOPADDING
AES_256/ECB/NOPADDING
PBEWITHHMACSHA224ANDAES_256
AES_128/CBC/NOPADDING
AESWRAP_192
AESWRAP
PBEWITHMD5ANDDES
AES_192/CBC/NOPADDING
PBEWITHHMACSHA256ANDAES_256
PBEWITHHMACSHA1ANDAES_128
PBEWITHSHA1ANDRC4_128
AES_192/OFB/NOPADDING
AES_128/ECB/NOPADDING
DESEDEWRAP
AESWRAP_256
RC2
PBEWITHSHA1ANDRC4_40
RSA
AESWRAP_128
PBEWITHHMACSHA512ANDAES_256
AES_192/CFB/NOPADDING
DESEDE
AES_128/CFB/NOPADDING
AES_192/ECB/NOPADDING
BLOWFISH
ARCFOUR
AES_256/CFB/NOPADDING
AES
RSA/ECB/PKCS1PADDING
AES_128/OFB/NOPADDING
AES_128/GCM/NOPADDING
DES
PBEWITHHMACSHA256ANDAES_128
PBEWITHSHA1ANDDESEDE
PBEWITHSHA1ANDRC2_40
PBEWITHHMACSHA384ANDAES_256
AES_256/OFB/NOPADDING
PBEWITHSHA1ANDRC2_128
PBEWITHMD5ANDTRIPLEDES
PBEWITHHMACSHA1ANDAES_256
PBEWITHHMACSHA224ANDAES_128
Linux环境下跑jar包,结果什么也没有输出
经排查 SecretKeyFactory 的类定义在 jre/lib/jce.jar内,推断是JDK版本不同导致
比对Windows版JDK 和 Linux版JDK,发现Linux版比Windows版 缺少某些包,进一步定位到 jre/lib/ext/sunjce_provider.jar
解决方案:
步骤1:将 Windows 中的sunjce_provider.jar 拷贝到 Linux JDK相应位置
步骤2:环境变量 CLASSPATH 追加 jre/lib/ext/sunjce_provider.jar
如
CLASSPATH = .:/usr/local/java/jdk1.8.0_251/jre/lib/ext/sunjce_provider.jar