1

我正在尝试在目标 C 中生成类似于 php 函数 sha1() 的输出的哈希。

我正在使用 CommonCrypto 框架中的 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

2

我自己解决了:

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

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

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

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

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

    return output;

}
于 2013-10-27T05:44:06.187 回答
0

它是同一个函数,很可能是 PHP 十六进制编码或 base64 编码 SHA1 算法的二进制输出。请展示你在双方得到的结果和你的代码。

于 2013-10-26T14:43:02.663 回答