2015-01-25 5 views
0

나는 다소 SHA-1 알고리즘을 사용 중이다. 대학 보고서의 SHA-1 알고리즘에서 몇 가지 값을 변경하면 결과의 차이점과 유사점을 찾아야합니다. 텍스트의 해시를 생성하는 Java 코드 조각을 발견했습니다. 그java.security.MessageDigest에서 SHA 다이제스트 크기를 어떻게 설정할 수 있습니까?

java.security.MessageDigest의

클래스를 가져 다. 그러나 h0-4 값을 변경하고 편집하려고하지만 어디에서 찾을 수 있을지 모르겠습니다. MessageDigest 클래스 내부를 살펴 보았지만 찾을 수 없었습니다. 제발 도와주세요!

고지.

답변

0

알고리즘을 조정할 때 알고리즘을 구현하는 내장 클래스를 사용하지 않아야합니다. 언급 한 클래스는 프로덕션에서만 사용하려는 사람들을위한 표준 알고리즘을 구현하도록 설계되었습니다. 만약 당신이 SHA-1 (또는 어떤 암호화 알고리즘)을 사용하는 대신에 놀고 조정할 필요가 없다면 알고리즘을 직접 (예 : 초기 해시 값을 변경하여) 변경하는 것이 결코 바람직하지 않으므로 클래스가 지원하지 않습니다 이러한 상수를 수정합니다.

알고리즘을 직접 구현하십시오. Wikipedia의 의사 코드에서 볼 때 복잡하지 않은 것처럼 보입니다. 나는 "자신 만의 암호를 구현하지 말고, 표준과 잘 테스트 된 구현을 사용하십시오"라는 것이 여기에 공통적 인 진언이지만, 프로덕션 유형의 코드에만 적용된다는 것을 알고 있습니다. 효과를 조정하면 으로 직접 구현해야하므로 수정할 때 더 유연하게 적용 할 수 있습니다.

0

는 기본적으로 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가 말하듯이, 과 다른 게임을하고자하는 경우 코드를 작성하면 표준 알고리즘과 다릅니다.

관련 문제