objective-c - 使用 UTF-8 字符创建 iOS SHA1 哈希

标签 objective-c hash utf-8

我正在使用此代码创建散列,从提供字符串到下放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/

相关文章:

python - 将数字 utf-8 序列转换为字符串

ios - 我的 Imageview 未在 iPad 中显示?

iphone - 向后方向的 NSRegularExpression?

ios - 在 View 中执行页面跳转是否违背MVC架构?

java - 如何将 Telugu 字符转换为 Java 中的 UTF-8 编码字符?

java - 为什么随机访问文件在我的 UTF-8 文本文件中读取“ï”作为第一个字符?

php - 上传到mysql服务器不工作

perl - 消除代码块歧义的 hashref 前面的 + 的历史是什么?

c++ - 如何创建哈希表

android - 首次登录 Facebook Android SDK 后出现无效的 android_key 参数错误