मैं एक सी प्रोग्राम लिखने की कोशिश कर रहा हूं जो साबित करता है कि SHA1 लगभग टकराव मुक्त है, लेकिन मैं यह नहीं समझ सकता कि वास्तव में मेरे इनपुट मानों के लिए हैश कैसे बनाया जाए। मुझे बस हैश बनाने की जरूरत है, और हेक्स मान को सरणी में स्टोर करें। कुछ Google खोजों के बाद, मैं OpenSSL प्रलेखन इस का उपयोग करने के लिए मुझे निर्देशन मिल गया है:सी प्रोग्रामिंग में SHA1 हैशिंग का उपयोग कैसे करें
#include <openssl/sha.h>
unsigned char *SHA1(const unsigned char *d, unsigned long n,
unsigned char *md);
int SHA1_Init(SHA_CTX *c);
int SHA1_Update(SHA_CTX *c, const void *data,
unsigned long len);
int SHA1_Final(unsigned char *md, SHA_CTX *c);
मेरा मानना है कि मैं या तो अहस्ताक्षरित चार * SHA1 या SHA1_Init का उपयोग कर होना चाहिए, लेकिन मुझे यकीन है कि तर्क होगा क्या नहीं कर रहा हूँ, यह देखते हुए एक्स मेरा इनपुट हैश करने के लिए है। क्या कोई इसे मेरे लिए साफ़ कर देगा? धन्यवाद।
आपके इनपुट मान क्या हैं: मेमोरी स्ट्रिंग्स, या फ़ाइल सामग्री? –
मैं जन्मदिन का हमला लिख रहा हूं जो एक नया हैश बनाना चाहिए और जब भी मैं सरणी के माध्यम से साफ़ करता हूं तो इसे अंत में जोड़ता हूं। मैं बस इसे सरल रखने जा रहा था और हैश का मूल्य I। त्वरित उत्तर, स्मृति तारों में। – spassen
'साबित करना कि SHA1 लगभग टकराव मुक्त है' के साथ आपका क्या मतलब है? SHA1 160-बिट हैश है, इसलिए 2^160 संभावित मान हैं, लेकिन 2^160 संभव स्ट्रिंग्स (1 एमबी से कम कहें) से कहीं अधिक हैं, इसलिए कई टकराव हैं। यदि आप सिर्फ यह जांचना चाहते हैं कि आपको कई यादृच्छिक रूप से जेनरेट किए गए तारों से टकराव मिलते हैं, तो आधा रास्ते विश्वसनीय उत्तर के लिए आवश्यक तारों की संख्या असुरक्षित रूप से उच्च है (जब तक कि आप जल्दी टकराव नहीं पाते हैं, लेकिन SHA1 को असाइन करने के लिए पर्याप्त रूप से परीक्षण किया जाता है एक लापरवाही छोटी संभावना)। –