我正在使用此代码创建散列,从提供字符串到下放IOS 应用程序。
-(NSString*) sha1:(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代码是
sha1(json_encode($array));
我有包含阿拉伯语 语言的字符串。
当我从 English 字符串创建散列并将其与从 Ubuntu*strong text* 下的 php 代码创建的散列进行比较时,结果将是一样。
但是当我创建带有Arabic 字符的散列时,它会将其与从 php 代码创建的散列进行比较,结果不匹配。
那么这段代码的 man 问题是什么。
谢谢
最佳答案
input.length
是字符数,不是字节数,不同的是UTF8编码下很多字节是多个字节长度。
替换:
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:input.length];
使用 NSString 方法:
NSData *data = [input dataUsingEncoding: NSUTF8StringEncoding];
不需要中间const char *cstr
。
关于objective-c - 使用 UTF-8 字符创建 iOS SHA1 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18978969/