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




objective-c sha1 (6)

क्या आपने जेन्स अल्फके की नई MyCrypto कक्षाएं MyCrypto हैं?

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

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

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


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

आप इसे मध्यस्थ को काटकर (यानी एनएसडीटा और एनएसएमयूटेबल स्टिंगिंग के बिना, त्वरित और बेहतर प्रदर्शन के बिना), (बदलते चार) को बदलकर (uint8_t []) कर सकते हैं, आखिरकार वे सभी हेक्स-एरे हैं !, नीचे:

-(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;
}

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

सादर

हीडर सती


यह 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;       
}

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

+(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 लाइब्रेरी को शामिल करने की आवश्यकता नहीं है क्योंकि यह पहले ही एन्कोड किया गया है।


यहां बताया गया है कि आप 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];

मुझे एक हॉट लाइब्रेरी से अवगत नहीं है, लेकिन अगर मैं सही ढंग से याद करता हूं तो एल्गोरिदम काफी सरल था।


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

-(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 में इसका परीक्षण किया गया था और ठीक काम करता है!







hmac