При попытке сгенерировать подписи HMAC + SHA256 для некоторых полезных нагрузок я получаю другой результат из командной строки openssl, чем openssl lib.
Это попытка сгенерировать подпись v4 для AWS.Я могу сделать это с помощью bash / curl успешно.Код показывает каждую подпись на каждом шаге, и все совпадения, кроме подписи для службы (s3), отличаются от тех, которые генерируются с помощью командной строки openssl
int i;
char data[1024] = "";
char hashString[SHA256_DIGEST_LENGTH*2];
unsigned char *bytearray=malloc(SHA256_DIGEST_LENGTH);
unsigned char *digest=malloc(SHA256_DIGEST_LENGTH);
printf("echo -n us-east-1|openssl dgst -sha256 -mac HMAC -macopt hexkey:b098ff9a24e0573d9e0f952963d0725c4e9c7566ebb3713bf8e0707d43146822\n");
strcpy(hashString,"b098ff9a24e0573d9e0f952963d0725c4e9c7566ebb3713bf8e0707d43146822\0");
strcpy(data, "us-east-1");
//This works
for (i = 0; i < strlen(hashString)/2 ; i++)
sscanf(hashString + 2*i, "%02x", (unsigned int *) &bytearray[i]);
digest = HMAC(EVP_sha256(), bytearray, strlen((const char *)bytearray), (unsigned char*)data, strlen(data), NULL, NULL);
printf(" should be: e811cc78009ad7918504aca1ff987199285352a6fabd1063d6d1a938ac673dbf\n");
printf("HMAC digest: ");
for(i = 0; i < SHA256_DIGEST_LENGTH; i++)
printf("%02x",(unsigned int)digest[i]);
printf("\n");
//This doesn't
printf("echo -n s3|openssl dgst -sha256 -mac HMAC -macopt hexkey:e811cc78009ad7918504aca1ff987199285352a6fabd1063d6d1a938ac673dbf\n");
strcpy(hashString,"e811cc78009ad7918504aca1ff987199285352a6fabd1063d6d1a938ac673dbf");
strcpy(data, "s3");
for (i = 0; i < strlen(hashString)/2 ; i++)
sscanf(hashString + 2*i, "%02x", (unsigned int *) &bytearray[i]);
digest = HMAC(EVP_sha256(), bytearray, strlen((const char *)bytearray), (unsigned char*)data, strlen(data), NULL, NULL);
printf(" should be: f405cc5d87cd57f8130decb58108ac0ae5a0bccb97e40729f9ace287d4ee054d\n");
printf("HMAC digest: ");
for(i = 0; i < SHA256_DIGEST_LENGTH; i++)
printf("%02x",(unsigned int)digest[i]);
printf("\n");