명령줄 HMAC 계산이 Node.JS crypto.createHmac('sha256') 과 다릅니다.

명령줄 HMAC 계산이 Node.JS crypto.createHmac('sha256') 과 다릅니다.

Node.js에서는 다음 코드를 사용합니다.

hash = crypto.createHmac('sha256', SECRET).update(fileContent).digest('hex');

HMAC를 계산합니다. C++/Qt 코드 시뮬레이션

QByteArray hash = QMessageAuthenticationCode::hash(
           fileContent, SECRET, QCryptographicHash::Sha256).toHex();

Node.JS의 텍스트 JSON 파일 내용과 동일한 결과를 생성합니다. 그러나 Linux 명령줄 HMAC 계산에서는 다른 해시 코드가 생성됩니다.

> openssl sha256 -hmac "SECRET" filename

명령줄에 어떤 문제가 있나요? 올바른 openssl주장은 무엇입니까?

답변1

동일한 입력을 제공하면 두 명령 모두 동일한 결과를 제공합니다. 다른 출력이 나오면 도구 중 하나에 버그가 있거나(가능성이 낮음) 동일한 입력을 전달하지 않는 것입니다. 알아채다:

  • SECRET무작위로 생성된 키 여야 합니다. 이 키의 각 바이트는 0이 될 확률이 1/256입니다. 명령줄에서는 null 바이트를 전달할 수 없습니다.
  • HMAC에 대한 입력은 일련의 바이트입니다. JavaScript 코드가 입력을 텍스트로 읽고 인코딩을 변경하거나 공백을 수정하면 다른 MAC이 발생합니다.
  • 특히, 후행 줄바꿈을 추가하거나 제거하지 않았는지 확인하세요.
  • 특히 Unix와 Windows 줄 끝이 변경되지 않았는지 확인하세요.

관련 정보