2014-12-22 13 views
2
import java.security.*; 

MessageDigest md = MessageDigest.getInstance("MD5"); 

NoSuchAlgorithm 예외로 실패합니다.MDS 사용시 NoSuchAlgorithm 예외

MessageDigest 등 문서 (http://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html)의 말 :

Java 플랫폼의 구현은 다음과 같은 표준 MessageDigest 등의 알고리즘을 지원하는 데 필요한

: MD5 SHA-1 SHA-256 를이 알고리즘에서 설명을 Java 암호화 아키텍쳐 Standard Algorithm Name Documentation의 MessageDigest 섹션 다른 알고리즘이 지원되는지 확인하려면 구현 문서를 참조하십시오.

어떻게 예외가 발생합니까?

다행히

import org.apache.commons.codec.digest.DigestUtils; 

System.out.println("md5 = "+DigestUtils.md5Hex(string));  

완벽하게 작동, 플러스는 우아하지만 여전히 아주 기본적인 실패처럼 보인다. 내가 무엇이 누락 되었습니까?

+1

나는 오타가 있다고 생각합니다. 문자열''MD5 ''를 다시 입력하십시오. 그렇지 않으면 잘못 설치된 JRE가 있습니다. 수십 년 동안 저를 위해 일해 왔습니다. – EJP

+0

제 시스템에서 잘 작동합니다 (Mint x64의 javac 1.8.0_25). – wchargin

+0

정확한 오류 로그를 공유 할 수 있습니까? 나는 또한 대답을 향상시켰다. –

답변

-2

방금 ​​DigestUtils 클래스를 살펴 보았습니다. NoSuchAlgorithmException에 대한 try-catch 핸들이 있습니다.

here에서 확인할 수 있습니다.

예외 처리를 위해 throws declaration 또는 try-catch 블록이 없습니다. 오류는 컴파일 오류 여야합니다. If it's not a compilation error check the "MD5" string typo.

컴파일 오류의 경우 try-catch 블록을 사용하여 코드를 처리하십시오.

try { 
    MessageDigest md = MessageDigest.getInstance("MD5"); 
} catch (NoSuchAlgorithmException e) { 
    e.printStackTrace(); 
} 

또는 메소드를 추가하십시오.

public static void main(String[] args) throws NoSuchAlgorithmException { 
+0

DigestUtils에서 잘못된 것을 선택하거나 오타를 만들 준비를하는 것이 현명합니다. 필자의 수수께끼는 "MD5"가 의무적 인 java 문서에 따르면이 예외가 어떻게 발생하는지입니다. 예외를 throw하더라도 올바른 인스턴스가 반환됩니까? 나는 블록 잡기를 시도해도 아무런 문제가 없다. 단지 예외적 인 것은 필수 기능이 존재하지 않는다는 이상한 신호이다. 이 예외는 의미가 없습니까? – user3795282

+0

이 예외는 무의미하지 않습니다. MessageDigest.getInstance() 메소드는, 예외를 throw했을 경우에 인스턴스를 돌려주지 않습니다. http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/security/MessageDigest.java#143, 소스 코드를 살펴볼 수 있습니다. –

+0

@ İlkerKorkut OP는 예외 처리 방법에 대해 질문하지 않고, 처음에는이 예외가 왜 던져 졌는지 묻고있었습니다. 그러나 한 가지 사실이 옳았습니다. 대소 문자가 중요하며 "MD5"로 철자하면 문제가 해결됩니다. –