我正试图在目标C中生成哈希,该哈希类似于php函数sha1((的输出。
我正在使用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(测试密码(:8b6118f8fd6935ad0876a3be34a717d32708ffd
输出目标c:kas_auth_data:8uC98qEpeX1J32yhKPdhdqNTno=
我自己解决了它:
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;
}
这是相同的函数,很可能是PHP十六进制编码或base64编码SHA1算法的二进制输出。请显示您在两边得到的内容和您的代码。