在Objective C中生成SHA256字符串

时间:2011-02-14 12:23:58

标签: iphone objective-c sha256

  

可能重复:
  Sha256 in Objective-C for iPhone

问候,

我在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];

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

我希望有人可以提供帮助。

非常感谢,

3 个答案:

答案 0 :(得分: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'。

希望它有所帮助。

答案 1 :(得分:3)

您正在将result传递给UIAlertView的{​​{1}}方法。 initresultchar[]UIAlertView。您需要将NSString*转换为char[]

试试这个:

NSString *

另请参阅有关iPhone上哈希的this文章。

答案 2 :(得分:1)

您需要使用OpenSSL C函数。有关如何执行此操作,请参阅this question。作为输入字符串,您使用长度为[myString UTFString]的{​​{1}}。