2011-12-12 17 views
6

मैं xcode उपयोग कर रहा हूँ के साथ काम नहीं कर रहा और यह मेरा SHA512 विधि है:ऑब्जेक्टिव-सी SHA2 हैश सही ढंग से गैर- ASCII

-(NSString*) sha512:(NSString*)input 
{ 
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding]; 
    NSData *data = [NSData dataWithBytes:cstr length:input.length]; 

    uint8_t digest[CC_SHA512_DIGEST_LENGTH]; 

    CC_SHA512(data.bytes, data.length, digest); 

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2]; 

    for (int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++) { 
     [output appendFormat:@"%02x", digest[i]]; 
    } 

    return output; 
} 

जब मैं इनपुट "परीक्षण" पारित करने के लिए प्रयास करते हैं, यह रिटर्न: "ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff " जो अन्य sha512 हैश टूल से मेल खाता है (मेरे जावा प्रोग्राम और" http://hash.online-convert.com/sha512- जनरेटर "सहित)।

हालांकि, जब मैं "ए" जैसे गैर-असीसी चार इनपुट करता हूं, तो यह मेरे सभी अन्य sha512 उपकरणों से कुछ अलग करता है। इनपुट "é" के लिए, मेरे विधि रिटर्न: "60313f8521d3016916d876f7ad11cf42a30dfd4ff9bc557f1e2f90e0d37c56b76ab5e42c8a16db20c18086b0d769c08542429c262cc21ee4fba02bfc689a4797" अन्य उपकरणों वापसी "9e2ad28633f24451bd4f3c1cb20586a21a44c3aeedbdc01b9cc8fa72917ea7bd689c82b8bf1fef89b911cf8cc46fa2c1ccc10087b2094fd4d3350ecd88526a2c" (फिर से अपने जावा प्रोग्राम और "http://hash.online-convert.com/sha512-generator" सहित)।

क्या मुझे कुछ याद आया? इस बारे में कोई विचार? धन्यवाद!

उत्तर

4

इस तरह से अपनी NSData वस्तु बनाएँ:

NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding]; 

बस डबल की जाँच की और इसे सही ढंग से इस तरह काम करता है।

+2

समस्या यह है कि '- [एनएसएसटींग लंबाई]' स्ट्रिंग में वर्णों की संख्या है, न कि विशिष्ट अक्षरों में उन वर्णों का प्रतिनिधित्व करने के लिए आवश्यक बाइट्स की संख्या। "é" एक चरित्र है, लेकिन जानकारी को एन्कोड करना जिसमें यह एक ई और एक तीव्र उच्चारण चिह्न दोनों शामिल है, कुछ एन्कोडिंग में एक से अधिक बाइट ले सकता है। –

+0

धन्यवाद! यह काम करता हैं! – evanwong