获取MessageDigest可以使用的每个算法?

Cor*_*urn 3 hash android

MessageDigest在您要哈希时使用一个字符串来表示要使用的算法.我在这里使用了一些代码来在我的Android设备上累积一个相当大的220"算法"列表.我使用它们作为算法迭代所有它们,MessageDigest并且它们中很少实际产生哈希.

我怎样才能在运行时确定哪些哈希值MessageDigest会产生输出而不尝试每一个?

Nik*_*kov 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());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 作为补充,Java规范要求每个MessageDigest至少支持MD5,SHA-1和SHA-256算法.(字体:http://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html) (3认同)