问候,
我在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];
这就是我想要创造的东西,我发现它非常困难!
我希望有人可以提供帮助。
非常感谢,
答案 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}}方法。 init
为result
,char[]
为UIAlertView
。您需要将NSString*
转换为char[]
。
试试这个:
NSString *
另请参阅有关iPhone上哈希的this文章。
答案 2 :(得分:1)
您需要使用OpenSSL C函数。有关如何执行此操作,请参阅this question。作为输入字符串,您使用长度为[myString UTFString]
的{{1}}。