1

PHP 関数 sha1() の出力に似た目的の C でハッシュを生成しようとしています。

CommonCrypto Framework の CC_SHA1 を使用していますが、出力が異なります。この問題に対処するためのアイデアやヒントはありますか?

よろしくお願いいたします。

ソリック

編集:

PHP コード:

$pwd = "testpassword";

echo "sha1($pwd): ".sha1($pwd);
?>

目的の C コード:

NSString *password = @"testpassword";
NSData *data = [password dataUsingEncoding:NSUnicodeStringEncoding];
/* remote BOM ->Byte Order Mark */
data = [NSData dataWithBytes:[data bytes] + 2 length:[data length] - 2];

NSString *unicodePassword = [[NSString alloc] initWithData:data encoding:NSUnicodeStringEncoding];
data = [unicodePassword dataUsingEncoding:NSUnicodeStringEncoding];


unsigned char hash[CC_SHA1_DIGEST_LENGTH];
CC_SHA1([data bytes], [data length], hash);
NSData *result = [NSData dataWithBytes:hash length:CC_SHA1_DIGEST_LENGTH];
//NSLog(@"Result: %@\n",[result base64EncodedString]);
kas_auth_data = [NSString stringWithFormat:@"%@", [result base64EncodedString]];
//kas_auth_data = [NSString stringWithFormat:@"%@", [result ]];
NSLog(@"kas_auth_data: %@\n", kas_auth_data);

出力 php: sha1(testpassword): 8bb6118f8fd6935ad0876a3be34a717d32708ffd

出力目標 c: kas_auth_data: 8uC98qEpeXx1J32yhKPdhdqNTno=

4

2 に答える 2

0

これは同じ関数であり、おそらく PHP は SHA1 アルゴリズムのバイナリ出力を 16 進エンコードまたは base64 エンコードします。両面とコードで何が得られるかを示してください。

于 2013-10-26T14:43:02.663 に答える