12

可能重复:
iPhone 的 Objective-C 中的 Sha256

问候,

我在 Objective C 中生成 SHA256 字符串时遇到了可怕的麻烦(可能是因为我对这门语言太陌生了)。

在 jQuery 中,我所要做的就是:

var sha256String=$.sha256("Hello");

它按预期产生哈希。

但是在Objective-C中,我尝试了以下方法无济于事:

NSString *pword=[[NSString alloc]
initWithString:login_pword.text];
unsigned char result[64];
CC_SHA256([pword UTF8String], [pword lengthOfBytesUsingEncoding:NSASCIIStringEncoding],result);
UIAlertView *msg=[[UIAlertView alloc] initWithTitle:@"Hi" message:result delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[msg show];
[msg release];

是否有一些我可以调用的函数,例如:

NSString *sha256String=[self getSHA256:pword];

这就是我想要创造的东西,我发现它非常困难!

我希望有人能帮帮忙。

提前谢谢了,

4

3 回答 3

56

今天玩了好久,终于想出了一个获取SHA256的函数:

-(NSString*) sha256:(NSString *)clear{
    const char *s=[clear cStringUsingEncoding:NSASCIIStringEncoding];
    NSData *keyData=[NSData dataWithBytes:s length:strlen(s)];

    uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0};
    CC_SHA256(keyData.bytes, keyData.length, digest);
    NSData *out=[NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
    NSString *hash=[out description];
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
    return hash;
}

这给出了与 PHP 相同的输出。它可以很容易地转换为 SHA1 - 只需将“SHA256”更改为“SHA1”。

希望它可以帮助某人。

于 2011-02-14T18:44:48.977 回答
3

您正在传递resultUIAlertView'init方法。resultchar[], 并且UIAlertView期望NSString*. 您需要将您的转换char[]NSString *.

试试这个:

NSString *resultString = [NSString stringWithCString:result encoding:NSASCIIStringEncoding];
UIAlertView *msg=[[UIAlertView alloc] initWithTitle:@"Hi" message:resultString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

另请参阅这篇关于 iPhone 上的散列的文章。

于 2011-02-14T12:32:45.113 回答
1

您将需要使用 OpenSSL C 函数。例如,请参阅this question关于如何做到这一点。作为输入字符串,您将使用[myString UTFString]with length [myString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]

于 2011-02-14T12:32:04.733 回答