6

OpenSSL を使用して MD5 HMAC を生成しようとしていましたが、ほとんどのコードは借用されています。生成される hmac が正しくありません:

#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <syslog.h>
#include <string.h>

#include <openssl/engine.h>
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() 
{
  unsigned char* key = (unsigned char*) "2012121220121212201212122012121220121212201212122012121220121212";
  unsigned char* data = (unsigned char*) "johndoejohndoejohndoejohndoejohndoejohndoejohndoejohndoejohndoejohndoejohndoejohndoe";
  unsigned char* expected = (unsigned char*) "abcd1d87dca34f334786307d0da4fcbd";
  unsigned char* result;
  // unsigned int result_len = 16;
  unsigned int result_len = 16;
  int i;
  static char res_hexstring[32];

  // result = HMAC(EVP_sha256(), key, 4, data, 28, NULL, NULL);
  result = HMAC(EVP_md5(), key, 32, data, 28, NULL, NULL);
  for (i = 0; i < result_len; i++) {
    sprintf(&(res_hexstring[i * 2]), "%02x", result[i]);
  }

  if (strcmp((char*) res_hexstring, (char*) expected) == 0) {
    printf("Test ok, result length %d\n", result_len);
  } else {
    printf("Got %s instead of %s\n", res_hexstring, expected);
  }
}

生成されたハッシュが正しくありません。フィードバックや誰かが私を正しい方向に向けてくれれば幸いです。

4

3 に答える 3

8

HMACの3番目と5番目のパラメーターが間違っています。キーの長さとデータの長さを渡す必要があります。あなたの例では、これはそれぞれ64と84であり、32と28ではありません。

それで :

-    result = HMAC(EVP_md5(), key, 32, data, 28, NULL, NULL);                                                                                                                                                                         
+    result = HMAC(EVP_md5(), key, 64, data, 84, NULL, NULL); 

この変更により、正常に機能しているようです。

于 2012-11-27T14:29:31.917 に答える
-1

次のように記述すれば、オールインワンの OpenSSL HMAC コマンドをより整然とすることができます。

result = HMAC(EVP_md5(), key, sizeof(key)-1, data, sizeof(data)-1, NULL, NULL);

keydataは文字列リテラルで初期化されるため、両方の最後の文字は です\0。この終了文字はハッシュ化しないでください。配列のサイズから最後の文字を引いた値を指定することで、この文字をスキップします。

https://www.rfc-editor.org/rfc/rfc2202から HMAC-MD5 の他のテスト ベクトルを取得できます。

于 2017-01-01T20:50:53.333 に答える