में इंजन प्रारंभिकरण को समझना मैं एचएमएसी-एसएचए -256 हैशिंग का मूल परीक्षण स्थापित करने की कोशिश कर रहा हूं लेकिन मुझे इंजन सेटअप में समस्याएं आ रही हैं। आदर्श रूप से मैं केवल एचएमएसी-एसएचए-एल्गोरिदम स्थापित करना चाहता हूं लेकिन अब तक मुझे सामान्य मामला भी नहीं मिला है जहां सभी एल्गोरिदम काम करने के लिए लोड करते हैं। वर्तमान में मुझे पंक्ति पर segfaults मिल रहा है जहां मैं डिफ़ॉल्ट digests सेट करने का प्रयास करें।ओपनएसएसएल
इसके अलावा, मैं नियमित रूप से जावा लड़का हूं, इसलिए कोड में किसी भी गलती को इंगित करने में संकोच न करें।
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
unsigned char* key = (unsigned char*) "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b";
unsigned char* data = (unsigned char*) "4869205468657265";
unsigned char* expected = (unsigned char*) "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7";
unsigned char* result;
HMAC_CTX* ctx;
ENGINE* e;
ENGINE_load_builtin_engines();
ENGINE_register_all_complete();
ENGINE_set_default_digests(e);
HMAC_CTX_init(ctx);
HMAC_Init_ex(ctx, key, 40, EVP_sha256(), e);
result = HMAC(NULL, NULL, 40, data, 16, NULL, NULL);
HMAC_CTX_cleanup(ctx);
ENGINE_finish(e);
ENGINE_free(e);
if (strcmp((char*) result, (char*) expected) == 0) {
printf("Test ok\n");
} else {
printf("Got %s instead of %s\n", result, expected);
}
}
संपादित करें: कार्यक्रम अब निम्न के विकसित किया गया है, लेकिन मैं अभी भी HMAC_Init_ex
पर segfaulting हूँ:
unsigned char* key = (unsigned char*) "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b";
unsigned char* data = (unsigned char*) "4869205468657265";
unsigned char* expected = (unsigned char*) "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7";
unsigned char* result;
unsigned int result_len = 64;
HMAC_CTX ctx;
ENGINE* e;
result = (unsigned char*) malloc(sizeof(char) * result_len);
e = (ENGINE*) ENGINE_new();
ENGINE_load_builtin_engines();
ENGINE_register_all_complete();
ENGINE_set_default_digests(e);
HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, key, 16, EVP_sha256(), e);
HMAC_Update(&ctx, data, 40);
HMAC_Final(&ctx, result, &result_len);
HMAC_CTX_cleanup(&ctx);
ENGINE_finish(e);
ENGINE_free(e);
सुझाव मार्टिन के लिए धन्यवाद, मैंने कोशिश की है उन्हें बाहर लेकिन मैं अभी भी अटक गया हूँ। मैं इस बारे में इंजन टिप्पणी के बारे में उत्सुक हूं कि आपने इसका उपयोग नहीं किया है। क्या इंजन के बिना ओपनएसएसएल का उपयोग करना संभव है? – Fylke