如何列出可用的密码算法?

我正在使用Cipher.getInstance(String algorithm)获得Cipher实现。 我的印象是,我可能传递的可用算法名称因我的类路径中存在的库而异。

我想编写一个简单的程序,我可以使用不同的类路径运行,列出可用的Cipher算法名称。 获取此列表需要调用哪种方法?

一旦我有了一个提供者列表,如JB Nizet的post中所述,我仍然没有算法列表。 我发现每个Provider都是一个Properties对象,Properties对算法名称进行编码。 我不完全清楚这是否是寻找它们的正确方法,以及其他所有属性的含义,但我只是编写了一个例程,它将所有属性喷射到System.out并为各种字符串设置grepped描述了什么我一直在寻找,直到找到它。

 import java.security.*; for (Provider provider: Security.getProviders()) { System.out.println(provider.getName()); for (String key: provider.stringPropertyNames()) System.out.println("\t" + key + "\t" + provider.getProperty(key)); } 

Cipher.getInstance()的文档说:

请注意,可以通过Security.getProviders()方法检索已注册提供程序的列表

单击该链接将指向Provider文档,该文档具有以下方法记录的getServices()方法:

获取此提供商支持的所有服务的不可修改的集合。

然后单击链接将指向具有getAlgorithm()方法的Provider文档。

请注意,这是一种非常经验的方法。 更合乎逻辑的方法是阅读您正在使用的加密库的文档。 它必须包含支持的算法列表。

无论您选择何种方法,阅读文档都会有很大帮助。

看起来这就是你真正需要的:

https://docs.oracle.com/javase/7/docs/api/java/security/Security.html#getAlgorithms(java.lang.String)

返回一组字符串,其中包含指定Java加密服务的所有可用算法或类型的名称(例如,Signature,MessageDigest,Cipher,Mac,KeyStore)。