문자열을 해독 할 필요없이 다른 문자열을 sha256 표현으로 검증하고 싶습니다. 이것이 가능한가?java - 문자열이 sha256 해시인지 확인하는 방법이 있습니까?
답변
sha-256 값은 일반적으로 Java에서 String
또는 byte[]
으로 나타내는 256 비트 (32 바이트) 값입니다.
값 자체로는 의미가 없습니다. 특정 String
이 해시인지 확인하려면 임의의 32 바이트 숫자가 무한한 알 수없는 일반 텍스트의 해시입니다. 그러나 "32 바이트 숫자가 숫자라는 것을 어떻게 알 수 있습니까?"라고 묻는 것과 같습니다. 아무데도 가지 않을 것입니다.
일반 텍스트와 쌍을 이루는 경우에만 유용하므로 일반 텍스트에서 계산 된 해시와 비교하여 일치하는지 확인할 수 있습니다.
"* 모든 32 바이트 숫자는 무한한 알려지지 않은 일반 텍스트의 해시입니다. *"=> 실제적으로 2^32 개의 가능한 SHA256 값이 있습니까? – assylias
http://crypto.stackexchange.com/questions/2670/is-every-output-of-a-hash-function-posable – assylias
@assylias : 아마도 '^ 2 (32 * 8)'가능한 SHA256 값을 의미 할 것입니다. 일반적으로 귀하의 질문에 대답이 없기 때문에 관련된 해시 함수에만 해당됩니다. 가능한 길이의 무한한 양의 일반 텍스트를 가정하면 해시 함수의 코도메인은 함수 자체가 적합 할 경우 완료 될 수 있습니다. 그것을 증명하는 것은 다른 이야기입니다. – Jack
다른 문자열을 해시 한 다음이 두 문자열을 서로 비교하는 것으로 생각합니다.
이것이 도움이 될지 모르겠지만 패스워드 시도를 해킹하기 위해 무지개 테이블을 만들 때 일반적으로 사용되는 것으로 읽었습니다.
EDIT : 아, 이것은 웹 페이지 iirc에 로그인 할 때 PHP에서 암호를 비교하는 방법이기도합니다.
적어도 나는 대학에서 이렇게해야만했다.
특정 규칙을 사용하여 문자열을 구문 분석하고 문자열을 sha 해시로 한정하려고 시도 할 수 있습니다. 다음 게시물은 귀하의 질문에 대한 답변을 드릴 것입니다 How to determine whether a string is a hash.
예 아니오.
문자열이 매우 쉽게 헥스인지 테스트 할 수 있습니다. 그런 다음 통계적으로 의미있는 숫자와 문자가 포함되어 있는지 테스트 할 수 있습니다. 그것은 몇몇 일반적인 비 sha256 문자열을 배제 할 것입니다.
누군가가 sha256처럼 보이도록 고안된 임의의 문자열을 만든다면 어떤 수학적 테스트로도 실제와 구별 할 수 없다고 생각합니다. 알고리즘은 그것에 강건하도록 설계되었습니다.
해시는 암호화되지 않습니다. 당신이 지금 무엇을 요구하고 있는지에 대해서는 매우 분명하지 않습니다. 기본적으로 해쉬의 유효성을 검사하는 방법은 문자열을 다시 해쉬하고 동일한 해시를 얻는지를 확인하는 것입니다. –