Rubyコード:iPhone SHA-1はRailsと異なる結果をエンコードしていますか?
a = OpenSSL::HMAC.digest('sha1', 'secret', 'example')
、その後:
Base64.encode64(a).chomp
利回り
aMp6Zw1+hHVMmwWXoFp/Aaipc20=
iPhone:
+ (NSData *)hmac:(NSString *)input withKey:(NSString *)key {
const char *cstrInput = [input cStringUsingEncoding:NSASCIIStringEncoding];
const char *cstrKey = [key cStringUsingEncoding:NSASCIIStringEncoding];
NSData *data = [NSData dataWithBytes:cstrInput length:input.length];
unsigned char chmac[CC_SHA1_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA1, cstrKey, strlen(cstrKey), data, [data length], &chmac);
NSData *hmacData = [[NSData alloc] initWithBytes:chmac length:sizeof(chmac)];
return [hmacData autorelease];
}
と
[XICrypto hmac:@"example" withKey:@"secret"];
NSLog(@"HMACData: %@",[HMACData description]);
NSString *HMACEncodedString = [HMACData base64Encoding];
(base64Encoding方法がCocoa Base 64 Implementation for REST Auth上のアレックス・レイノルズ答えからである。)
結果は、したがって、これらの方法は、なぜ、同じ操作を実行していない
Qm+ManmzmtfhpOzFdf8UHW43L5o=
をもたらしますか?
EDIT:Railsコールでdigestとkeyが後方にありました。 iPhoneのコールとはまだ結果が異なるという問題を修正しました。
ここを見ていますか? SHA-1暗号化を実行するための正しい機能を使用しているかどうかはわかりません。http://stackoverflow.com/questions/3468268/objective-c-sha1 – Perception
CCHmacは、init updateとfinalの1関数呼び出しであると考えられています。私はこの問題を調べており、文字列エンコーディングが最大の違いを作り出しています。 – Joe
@受付、その投稿の秘密鍵のオプションは表示されません。 @Joe、エンコーディングに問題はありますか? – quantumpotato