如何列出可用的密码算法?
我正在使用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文档。
请注意,这是一种非常经验的方法。 更合乎逻辑的方法是阅读您正在使用的加密库的文档。 它必须包含支持的算法列表。
无论您选择何种方法,阅读文档都会有很大帮助。
看起来这就是你真正需要的:
返回一组字符串,其中包含指定Java加密服务的所有可用算法或类型的名称(例如,Signature,MessageDigest,Cipher,Mac,KeyStore)。