2012-10-11 2 views
3

MessageDigest은 해시를 할 때 사용할 알고리즘을 나타내는 문자열을 사용합니다. I've used some of the code here 내 안드로이드 장치에 220 "알고리즘"의 비교적 큰 목록을 축적. 나는 그들 모두를 통해 알고리즘을 사용하여 MessageDigest의 알고리즘을 반복했으며 실제로는 해시를 생성하지 않았습니다.MessageDigest가 사용할 수있는 모든 알고리즘을 취득합니까?

런타임시 어떻게 해시를 결정할 수 있습니까? MessageDigest은 모든 것을 시도하지 않고 출력을 생성합니까?

답변

8

각 공급자의 Services을 나열한 다음 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()); 
    } 
    } 
} 
+1

, 여기에 4.1.2 에뮬레이터에서 목록 출력입니다 : http://pastebin.com/Vy0Yx3Dq –

+3

상보는 자바 스펙은 적어도 MD5, SHA-1을 지원하는 모든 MessageDigest 등 필요 및 SHA-256 알고리즘. (글꼴 : http://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html) – Tiago

+1

Android는 모든 Oracle 사양을 확인하지 않습니다. –

관련 문제