दिलचस्प पोस्ट
जब "नया" और कब का उपयोग नहीं किया जाए, तो C ++ में? लोडर मैनेजर द्वारा प्रबंधित कस्टम एडेप्टर के साथ अल्फाबेट इंडेक्सर मैं सी में निष्पादन योग्य का स्थान कैसे प्राप्त करूं? केवल डिबग बिल्ड के लिए विजुअल स्टूडियो पोस्ट-बिल्ड इवेंट कैसे चलाएं मैं अजगर का उपयोग कर प्रत्यक्ष-निष्पादन योग्य क्रॉस-प्लेटफार्म जीयूआई ऐप कैसे बना सकता हूं? क्या मैं सीएसएस में एक छवि की ऊंचाई को बदल सकता हूँ: पहले /: छद्म तत्वों के बाद? निष्पादक सेवा का उपयोग कर, सभी थ्रेड्स को समाप्त करने के लिए कैसे प्रतीक्षा करें? एंड्रॉइड, पता लगाएँ कि जब अन्य एप्लिकेशन लॉन्च होते हैं मैं एक पायथन मॉड्यूल को कैसे लोड करूँ? यह कैसे बताने के लिए कि एक बिंदु एक पंक्ति के दाईं ओर या बाईं तरफ है डीएलएल का एक संदर्भ जोड़ा नहीं जा सका पायथन कक्षा का आईडी अद्वितीय क्यों नहीं है, जब इसे जल्दी से बुलाया जाता है? एक विशाल। Csv फ़ाइल पढ़ना ब्राउज़र विंडो को बंद करने से कैसे रोकें? ./configure: / bin / sh ^ M: खराब इंटरप्रिटर

एचएमएसी-एसएचए 1 के लिए उद्देश्य-सी नमूना कोड

मुझे उद्देश्य सी में एचएमएसी-एसएचए 1 उत्पन्न करने की आवश्यकता है। लेकिन मुझे कुछ भी नहीं मिला जो काम करता है मैंने कॉमनक्रीप्टो के साथ कोशिश की, सीसीएचएमएसी का इस्तेमाल किया, लेकिन काम नहीं किया। मुझे एक एचएमएसी उत्पन्न करने और एचओटीपी नंबर बनाने के बाद

किसी का उद्देश्य सी या सी में कोई उदाहरण कोड है?

वेब के समाधान से एकत्रित समाधान "एचएमएसी-एसएचए 1 के लिए उद्देश्य-सी नमूना कोड"

यहां बताया गया है कि SHA-256 का उपयोग करके आप एचएमएसी कैसे उत्पन्न करते हैं:

NSString *key; NSString *data; const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding]; const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding]; unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC); NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)]; NSString *hash = [HMAC base64Encoding]; 

मुझे एक HOTP लाइब्रेरी के बारे में पता नहीं है, लेकिन एल्गोरिदम काफी सरल है, अगर मुझे सही ढंग से याद हो

यहां बताया गया है कि आप एचएमएसी-एसएचए 1 आधार 64 कैसे बना सकते हैं।

आपको Base64.h और Base64.m को अपने प्रोजेक्ट में जोड़ना होगा। आप इसे यहां से प्राप्त कर सकते हैं ।

यदि आप एआरसी का उपयोग करते हैं, तो यह Base64.m में कुछ त्रुटियां दिखाएगा लाइनों को ढूंढें जो इस तरह के समान हैं

 return [[[self alloc] initWithBase64String:base64String] autorelease]; 

आप की जरूरत है autorelease अनुभाग को हटाने के लिए है। अंतिम परिणाम ऐसा दिखना चाहिए:

 return [[self alloc] initWithBase64String:base64String]; 

अब आपके सामान्य प्रोजेक्ट में "Base64.h" आयात और निम्न कोड हैं

 #import "Base64.h" #include <CommonCrypto/CommonDigest.h> #include <CommonCrypto/CommonHMAC.h> - (NSString *)hmacsha1:(NSString *)data secret:(NSString *)key { const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding]; const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding]; unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC); NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)]; NSString *hash = [HMAC base64String]; return hash; } 

साथ में

 NSLog(@"Hash: %@", hash); 

आप इस तरह से कुछ मिल जाएगा:

 ghVEjPvxwLN1lBi0Jh46VpIchOc= 

यह पूरा समाधान है जो बिना किसी अतिरिक्त पुस्तकालयों या हैक्स के काम करता है:

 +(NSString *)hmac:(NSString *)plainText withKey:(NSString *)key { const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding]; const char *cData = [plainText cStringUsingEncoding:NSASCIIStringEncoding]; unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC); NSData *HMACData = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)]; const unsigned char *buffer = (const unsigned char *)[HMACData bytes]; NSString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2]; for (int i = 0; i < HMACData.length; ++i) HMAC = [HMAC stringByAppendingFormat:@"%02lx", (unsigned long)buffer[i]]; return HMAC; } 

आपको किसी भी तीसरे पक्ष के बेस 64 लाइब्रेरी को शामिल करने की आवश्यकता नहीं है क्योंकि यह पहले ही इनकोडेड है

यह कस्टम प्रोटोकॉल का उपयोग किए बिना काम करता है, http://cocoawithlove.com/2009/07/hashvalue-object-for-holding-md5-and.html से कुछ कोड का उपयोग कर

HashSHA256.h

 #import <Foundation/Foundation.h> #import <CommonCrypto/CommonDigest.h> @interface HashSHA256 : NSObject { } - (NSString *) hashedValue :(NSString *) key andData: (NSString *) data ; @end 

HashSHA256.m

 #import "HashSHA256.h" #import <CommonCrypto/CommonHMAC.h> @implementation HashSHA256 - (NSString *) hashedValue :(NSString *) key andData: (NSString *) data { const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; const char *cData = [data cStringUsingEncoding:NSUTF8StringEncoding]; unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC); NSString *hash; NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) [output appendFormat:@"%02x", cHMAC[i]]; hash = output; return hash; } @end 

उपयोग:

 - (NSString *) encodePassword: (NSString *) myPassword { HashSHA256 * hashSHA256 = [[HashSHA256 alloc] init]; NSString * result = [hashSHA256 hashedValue:mySecretSalt andData:myPassword]; return result; } 

मैं पूरे दिन बिताने के लिए, जनहित हैश (बाइट्स) को पठनीय डेटा में बदलने की कोशिश कर रहा हूं। मैंने ऊपर से उत्तर से base64 एन्कोडेड समाधान का इस्तेमाल किया और यह मेरे लिए बिल्कुल भी काम नहीं किया (बीटीडब्ल्यू आपको जरूरत है और बाहरी .h, जिस पर मुझे बेस 64 एन्कोडिंग का उपयोग करने में सक्षम होना था)।

तो मैंने यह किया था (जो बाहरी के बिना पूरी तरह से काम करता है।):

 CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC); // Now convert to NSData structure to make it usable again NSData *out = [NSData dataWithBytes:cHMAC length:CC_SHA256_DIGEST_LENGTH]; // description converts to hex but puts <> around it and spaces every 4 bytes NSString *hash = [out description]; hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""]; hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""]; hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""]; // hash is now a string with just the 40char hash value in it NSLog(@"%@",hash); 

यह हे है कि यह बिना हेक्स स्ट्रिंग की बाहरी फ़ाइलों के बिना करता है:

 -(NSString *)hmac:(NSString *)plaintext withKey:(NSString *)key { const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding]; const char *cData = [plaintext cStringUsingEncoding:NSASCIIStringEncoding]; unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC); NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)]; const unsigned char *buffer = (const unsigned char *)[HMACData bytes]; NSMutableString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2]; for (int i = 0; i < HMACData.length; ++i){ [HMAC appendFormat:@"%02x", buffer[i]]; } return HMAC; } 

यह आईओएस 7 के साथ एक्सकोड 5 में परीक्षण किया गया था और ठीक काम करता है!

ब्याज से, आप (अहस्ताक्षरित चार सीएचएमएसी) क्यों बनाते हैं और फिर (एनएसडीटा) में कनवर्ट कर सकते हैं और फिर उसे (एनएमएमयूटीबल स्ट्रिंग) में परिवर्तित कर सकते हैं और फिर आखिर में (हेक्सस्ट्राइंग) कन्वर्ट करते हैं?

आप बिचौलिया (यानी NSData और NSMutableString के बिना पूरी तरह, तेज और बेहतर प्रदर्शन) के बिना, (भी) चारों ओर (यूआईटी 8_टी []) बदलते हुए (यूआईटी 8_ टी []) को बदलकर, यह सब कुछ हेक्स-एरेज़ कर रहे हैं। नीचे:

 -(NSString *)hmac:(NSString *)plaintext withKey:(NSString *)key { const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding]; const char *cData = [plaintext cStringUsingEncoding:NSASCIIStringEncoding]; uint8_t cHMAC[CC_SHA1_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC); NSString *Hash1 = @""; for (int i=0; i< CC_SHA1_DIGEST_LENGTH; i++) { Hash1 = [Hash1 stringByAppendingString:[NSString stringWithFormat:@"%02X", cHMAC[i]]]; } return Hash1; } 

आशा है कि ये आपकी मदद करेगा,

सादर

हेइडर सती

क्या आपने जेन्स अल्फके की नई माइक्रिप्टो क्लास को देखा है?

उनके पास उनके ब्लॉग पर कुछ नमूना कोड है