MessageDigest
当你要散列时,需要一个字符串来表示要使用的算法。我在这里使用了一些代码在我的 android 设备上积累了相当大的 220 个“算法”列表。我使用它们作为算法遍历了所有这些,MessageDigest
但实际上很少有它们产生哈希。
我如何在运行时确定哪些哈希MessageDigest
会产生输出而不尝试每一个?
MessageDigest
当你要散列时,需要一个字符串来表示要使用的算法。我在这里使用了一些代码在我的 android 设备上积累了相当大的 220 个“算法”列表。我使用它们作为算法遍历了所有这些,MessageDigest
但实际上很少有它们产生哈希。
我如何在运行时确定哪些哈希MessageDigest
会产生输出而不尝试每一个?
列出每个提供者的服务,然后调用该getType()
方法。如果是MessageDigest
,那么这是一个哈希算法。就像是:
Provider[] providers = Security.getProviders();
for (Provider p : providers) {
String providerStr = String.format("%s/%s/%f\n", p.getName(),
p.getInfo(), p.getVersion());
Set<Service> services = p.getServices();
for (Service s : services) {
if ("MessageDigest".equals(s.getType())) {
System.out.printf("\t%s/%s/%s", s.getType(),
s.getAlgorithm(), s.getClassName());
}
}
}