java - 使用 cipher.getInstance 方法时出现 NoSuchAlgorithm 异常

标签 java exception encryption ibm-was

我正在使用 cipher java 进行密码解密逻辑。其中,在使用 cipher.getInstance("RSA/NONE/NoPadding") 获取密码实例时。我收到以下异常:NoSuchAlgorithm

相同的代码在我的本地 jboss 服务器设置中工作,但在 IBM-WAS 服务器设置中不起作用。本地jboss Server和WAS Server有什么区别吗?

public static String decrypt(String encrypted, KeyPair keys) {
    Cipher dec;
    try {

        dec = Cipher.getInstance("RSA/NONE/NoPadding"); //Exception raised
        dec.init(Cipher.DECRYPT_MODE, keys.getPrivate());

    } catch (GeneralSecurityException e) {
        throw new RuntimeException("RSA algorithm  not supported", e);//Catch block executed
    }
}

日志:

R Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/NoPadding
    at java.lang.Throwable.<init>(Throwable.java:80)
    at javax.crypto.Cipher.getInstance(Unknown Source)
    at com.lsi.utils.JCryptionUtil.decrypt(JCryptionUtil.java:59)
    Caused by: java.security.NoSuchAlgorithmException: Mode: NONE not implemented
    at com.ibm.crypto.provider.RSA.engineSetMode(Unknown Source)
    at javax.crypto.Cipher$a_.a(Unknown Source)

**Jar**

Jce.jar - javax.crypto.Cipher;
bcprov-jdk15-140.jar (External security provider jar)

最佳答案

Oracle 安全提供程序仅支持ECB 模式而不是NONE。算法由 security providers 提供, 注册到 JVM 和他们的名字到提供者创建者。

在某些情况下,当您事先无法知道在执行环境中安装了哪些安全提供程序时,您可以尝试不同的选项。例如,像这样:

Cipher cipher = null;
try {
    cipher = Cipher.getInstance("RSA/ECB/NoPadding");
} catch (NoSuchAlgorithmException e) {
    cipher = Cipher.getInstance("RSA/NONE/NoPadding");
}

另一种可能性是在启动时检查已安装的提供程序并做出有关算法的决定

for (Provider provider : Security.getProviders()) {
    for (Provider.Service service : provider.getServices()) {
        System.out.println(provider.getName() + ": " + service.getType() + "." + service.getAlgorithm());
        // check these values and find a best match
    }
}

关于java - 使用 cipher.getInstance 方法时出现 NoSuchAlgorithm 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27292366/

相关文章:

c - std C 有没有办法告诉我是否可以安全地取消引用指针

exception - Powershell 捕获异常

c# - 自定义非对称密码算法

java - Jackson XmlMapper 将XML转换为POJO,节点文本的键是 ""

java - Appium java 给出 null 作为输出

java - 对于不懂 sql 的人来说,有没有免费的基于 GUI 的 sql 数据操作工具?

java - Java 中的异常处理

php - 如何为 openssl_private_decrypt() 提供私钥

凯撒密码算法移位 C

java - 如何在 Android Studio 中将 Activity 转换为 fragment ?