나는 가장자리가있다. 필자는 상업적으로 폐쇄 된 소스 도구에서 생성 된 바이너리 데이터 파일을 읽는 코드를 작성하고 있습니다. 데이터 형식에 대한 정보는 문서에 지정되어 있습니다.은 길이가 0 인 메시지에 대해 HMACSHA1을 정의합니까?
데이터 무결성 검사의 경우 공급 업체의 사양은 RFC2898에 따라 암호에서 파생 된 키를 사용하여 SHA1을 기반으로 HMAC을 요구합니다. 많은 프로그래밍 환경에는 이러한 해시를 생성하는 HMACSHA1 클래스가 있습니다.
길이가 0이 아닌 데이터 스트림의 경우 해시를 성공적으로 계산할 수 있으며 코드의 계산은 공급 업체의 구현과 일치합니다. 즉, 내 코드는 공급 업체가 작성한 파일을 읽고 인증 할 수 있으며 그 반대의 경우도 마찬가지입니다.
그러나 데이터 스트림의 길이가 0이면 공급 업체의 도구가 모두 0이 아닌 해시를 내 보냅니다. HMACSHA1을 실행할 메시지가없는 경우 어디서 왔는지는 알 수 없습니다.
HMACSHA1 또는 모든 HMAC의 경우 "null 메시지"의 경우에 대해 정의 된 MAC은 무엇입니까?
제 질문은 플랫폼에 구애받지 않는다고 생각합니다.하지만 .NET을 사용하고 있습니다. System.Security.Cryptography.HMACSHA1입니다.
하나의 플랫폼 고유의 비트가 : 나는 인스턴스를 통해 데이터를 실행하지 않은 경우, 해당 유형의 인스턴스에 대한 해시 속성을 얻을 때, 나는
Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at System.Security.Cryptography.HashAlgorithm.get_Hash()
를 얻을 수 해시 할 것이 없기 때문에 이것은 전혀 놀라운 일이 아닙니다.
어떤 힌트가 있습니까?
이것은 HMACSHA1이 길이가 0 인 메시지에 대해 정의되지만 정의되지 않은 (널) 메시지에는 정의되지 않음을 의미합니다.예상대로. –