3

MessageDigest当你要散列时,需要一个字符串来表示要使用的算法。我在这里使用了一些代码在我的 android 设备上积累了相当大的 220 个“算法”列表。我使用它们作为算法遍历了所有这些,MessageDigest但实际上很少有它们产生哈希。

我如何在运行时确定哪些哈希MessageDigest会产生输出而不尝试每一个?

4

1 回答 1

8

列出每个提供者的服务,然后调用该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());
    }
  }
}
于 2012-10-12T02:36:50.363 回答