在Objective C中生成SHA256字符串

Eam*_*orr 12 iphone objective-c sha256

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

问候,

我在Objective C中生成SHA256字符串时遇到了麻烦(可能是因为我对语言这么新).

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

var sha256String=$.sha256("Hello");
Run Code Online (Sandbox Code Playgroud)

它按预期产生哈希值.

但是在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];
Run Code Online (Sandbox Code Playgroud)

是否有一些我可以调用的功能,如:

NSString *sha256String=[self getSHA256:pword];
Run Code Online (Sandbox Code Playgroud)

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

我希望有人能帮帮忙.

提前谢谢了,

Eam*_*orr 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;
}
Run Code Online (Sandbox Code Playgroud)

这提供了与PHP相同的输出.它可以很容易地转换为SHA1 - 只需将'SHA256'更改为'SHA1'即可.

希望它可以帮助某人.

  • 使你的代码依赖于`description`对我来说似乎是一个非常糟糕的主意.描述并不意味着机器可读,而仅用于调试. (3认同)

Mar*_*c W 3

您正在传递resultUIAlertView的方法initresult是一个char[],并且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];
Run Code Online (Sandbox Code Playgroud)

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