Java 不管我提供什么算法,SecretKeyFactory.getInstance都不会给我任何算法异常

Java 不管我提供什么算法,SecretKeyFactory.getInstance都不会给我任何算法异常,java,android,android-studio,cryptography,Java,Android,Android Studio,Cryptography,所以我一直在看这一页: 他们似乎声称,这些算法中的任何一种都应该与Android Studio中的SecretKeyFactory配合使用,但当我输入以下代码时: SecretKeyFactory key = SecretKeyFactory.getInstance("Algorithm-Name"); 无论我在android网站上列出了什么算法名称,它总是给我 未处理的异常:java.security.NoSuchAlgorithmException 我在eclipse中用一个标准Java项

所以我一直在看这一页:

他们似乎声称,这些算法中的任何一种都应该与Android Studio中的SecretKeyFactory配合使用,但当我输入以下代码时:

SecretKeyFactory key = SecretKeyFactory.getInstance("Algorithm-Name");
无论我在android网站上列出了什么算法名称,它总是给我

未处理的异常:java.security.NoSuchAlgorithmException

我在eclipse中用一个标准Java项目进行了尝试,效果很好


我也试过使用spongycastle,但似乎也不起作用

您的提供商配置似乎有问题。您可以尝试使用以下代码列出可用的算法:

Provider[] providers = Security.getProviders();
for (Provider provider : providers) {
    boolean printedProvider = false;
    Set<Service> services = provider.getServices();
    for (Service service : services) {
        String algorithm = service.getAlgorithm();
        String type = service.getType();
        if (type.equalsIgnoreCase("SecretKeyFactory")) {
            if (!printedProvider) {
                System.out.printf("%n === %s ===%n%n", provider.getName());
                printedProvider = true;
            }
            System.out.printf("Type: %s alg: %s%n", type, algorithm);
        }
    }
}
如果没有打印任何内容,那么为同一运行时创建一个空项目,然后再次运行它。如果它确实显示了一个算法,那么您应该确保打印的提供程序在您的项目配置中可用


如果没有,您应该重新安装SDK或运行时,因为项目设置存在严重错误。

Well SecretKeyFactory.getInstanceAlgorithm-Name永远不会工作,是吗?假设你得到一个具体的,并提供了一个正确的代码行是不工作的?你已经尝试了每一个算法在那里?你能给我们看一个特定的堆栈跟踪吗?您是否可能从运行时中更改或删除提供程序?您使用的是什么运行时/SDK?您可以尝试通过在运行时迭代所有的提供者和服务来列出算法……同时确保您使用的是正确的SecretKeyFactory类;一些提供程序模仿JCAAPI使用的类名结构,导致一些可怕的编码错误。