는 기본적으로 Rahil의 대답 @에 추가하지만 덧글에 대한 너무 많은 : MessageDigest
이 구현된다면
가
심지어 API에 액세스하지 않고, 당신이 반사를 사용할 수 있습니다. 그러나 그렇지 않습니다.
대부분의 Java 표준 라이브러리는 일반적으로 일반적으로 유용한 클래스입니다 (예 : java.util.ArrayList
에는 ArrayList (또는 ArrayList <? >부터 6까지), java.io.FileInputStream
(구현시 다른 클래스를 사용할 수도 있음) 등 FileInputStream 구현이 포함되어 있습니다. Java Cryptography는 구현이 API 클래스가 아니라 대부분 자신의 jar (JRE/lib 및 JRE/lib/ext)에있는 "제공자"에 rt.jar가 아니고 주로 (?) src.zip에 소스가 없습니다.
따라서 java.security.MessageDigest
클래스에는 SHA1 또는 SHA256 또는 MD5 등을 구현하는 코드가 없습니다. 대신 알고리즘 요구 사항의 구현을 찾기 위해 JVM의 현재 암호화 공급자 목록을 검색하는 코드가 있습니다. 그것을 인스턴스화하고 사용하십시오. 일반적으로 사용되는 공급자 목록은 JRE 배포본에 포함 된 목록 (목록)으로 설정되지만 관리자 나 프로그램이 변경할 수 있습니다. 일반 JRE7 공급자의 경우 SHA1은 sun.security.provider.SHA
으로 구현됩니다.
실질적으로 MessageDigest Signature Cipher KeyGenerator
등의 API 클래스는 자바 코드 용어로는 실제 클래스이고 인터페이스는 아니지만 가능성이있는 여러 기본 구현에 공통적으로 나타나는 동작을 표현하여 인터페이스 또는 facades와 유사하게 기능합니다.
이것은 1990 년 이후로, 특히 미국에서 수출 할 때 적용되는 암호화에 대한 법적 제한 사항에 대처하도록 설계되었습니다. 그 자체만으로는 암호가 없었기 때문에 기본 Java 플랫폼을 쉽게 배포 할 수있었습니다. 에을 사용하십시오. Java의 사용자 데이터에 "실제"암호를 사용하지 않아도 서명 된 코드 확인과 같은 것이 필요합니다. 일부 공급자를 추가해야합니다. 미국의 설치에 사용되는 완전하고 강력한 알고리즘을 갖춘 한 세트의 공급자와, 다른 곳에서는 사용되지 않는 더 작고 약한 알고리즘을 가진 한 세트의 공급자가있을 수 있습니다. 미국이 공식적으로 이완하고 실제로는 2000 년경 시행을 기본적으로 중단했기 때문에이 기능은 훨씬 덜 필요합니다. 하지만 여전히 하나의 잔여 비트가 있습니다. JCE (Oracle JRE의 경우)에는 128 비트 이상의 대칭 키를 허용하지 않는 정책이 있습니다. 이를 사용하려면 Oracle 웹 사이트에서 다운로드하여 추가 (작은) 파일 "JCE Unlimited Strength Policy"를 설치해야합니다.
TLDR : JCE 구현을 변경하지 마십시오. @cpast가 말하듯이, 과 다른 게임을하고자하는 경우 코드를 작성하면 표준 알고리즘과 다릅니다.