SHA1 xeshlari mening Rails va Cocoa ilovalarim o'rtasida mos kelmaydi

Menda kakao ilovasi bor, bu ma'lumotlarning SHA1 xeshi bilan birga ba'zi ma'lumotlarni Rails ilovasiga yuboradi, bu ma'lumotlar va xesh mos kelishini tekshiradi, lekin ular yo'q.

Ishonch hosil qilish uchun men Rails va Kakao tomonida konsolga xeshlangan ma'lumotlarning olti burchakli versiyalarini qayd etganman va ular to'liq mos keladi.

Mana kakao qismi:

#import <CommonCrypto/CommonDigest.h>

//...

- (NSData *)dataOfSHA1Hash
{
    unsigned char hashBytes[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1([self bytes], CC_SHA1_DIGEST_LENGTH, hashBytes);

    return [NSData dataWithBytes:hashBytes length:CC_SHA1_DIGEST_LENGTH];
}

//...

NSData *signatureData = [signedData dataOfSHA1Hash];
NSString *signature = [signatureData hexadecimalString];

..va relslar:

Digest::SHA1.hexdigest(signed_data)

E'tibor bering, -hexadecimalString men sinab ko'rgan NSData uchun maxsus kengaytmadir (ichiga o'rnatilmaganga o'xshaydi). Bu usul muammo emasga o'xshaydi.

Xo'sh, nega mening SHA1 xeshlari bir xil ma'lumotlarga mos kelmaydi? Har qanday fikr bormi?

Tahrirlash: misol

“Salom dunyo!” qatori uchun.

Cocoa: f98ee9c814c2f3c66ccdca641298d12cd26741ec
Rails: 2ef7bde608ce5404e97d5f042f95f89f1c232871

Kakao:

NSMutableData *signedData = [[NSMutableData alloc] init];
[signedData appendData:[@"Hello World!" dataUsingEncoding:NSUTF8StringEncoding]];

NSData *signatureData = [signedData dataOfSHA1Hash];
[signedData release];
NSString *signature = [signatureData hexadecimalString];

NSLog(@"Signature: %@", signature);
// output: Signature: f98ee9c814c2f3c66ccdca641298d12cd26741ec

Ruby:

>> Digest::SHA1.hexdigest("Hello World!")
=> "2ef7bde608ce5404e97d5f042f95f89f1c232871"

person Sijmen Mulder    schedule 27.03.2009    source manba
comment
Qaysi biri noto'g'ri ekanligini ko'rishimiz uchun namunaviy ma'lumotlar va hazmatlarni joylashtirasizmi?   -  person cobbal    schedule 27.03.2009
comment

Serverda YUI bilan Node.js. Ushbu videoni ko'ring: http://www.yuiblog.com/blog/2010/09/29/video-glass-node/

Ushbu videodagi yigit Dav Glass Digg-dan sahifani olish uchun tugundan qanday foydalanishiga misol ko'rsatadi. Keyin u YUI-ni qo'lga kiritgan DOM-ga biriktirdi va uni butunlay boshqara oladi.

  -  person glenc    schedule 28.01.2011
comment
Menda shunga o'xshash xatolik bor edi, lekin mening holimda CC_SHA1 ga birinchi argument uchun ma'lumotlar ko'rsatgichidan foydalanardim. Men [data bytes] dan foydalanishim kerak edi. Buni tushunish uchun juda uzoq vaqt kerak bo'ldi.   -  person Ben Scheirman    schedule 06.03.2012


Javoblar (1)


Xatoni topdim, ahmoqona narsa:

-CC_SHA1([self bytes], CC_SHA1_DIGEST_LENGTH, hashBytes);
+CC_SHA1([self bytes], [self length], hashBytes);

Men ma'lumotlar uzunligi o'rniga dayjest uzunligini yubordim. Qanday qilib men bunday xatoga yo'l qo'yganimni bilmayman - va keyin soatlab bunga e'tibor bermayman.

person Sijmen Mulder    schedule 27.03.2009