Objective-C隐式转换失去整数精度(从大小转换为CC长度)
我有一个函数生成字符串的sha256加密 下面是函数:Objective-C隐式转换失去整数精度(从大小转换为CC长度),objective-c,macos,Objective C,Macos,我有一个函数生成字符串的sha256加密 下面是函数: -(NSString*)sha256HashFor:(NSString*)input { const char* str = [input UTF8String]; unsigned char result[CC_SHA256_DIGEST_LENGTH]; CC_SHA256(str, strlen(str), result); NSMutableString *ret = [NSMutableS
-(NSString*)sha256HashFor:(NSString*)input
{
const char* str = [input UTF8String];
unsigned char result[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(str, strlen(str), result);
NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++)
{
[ret appendFormat:@"%02x",result[i]];
}
return ret;
}
我猜我只需要将strlen(str)转换为CC_-Long,但我不知道该怎么做
(CC_Long)strlen(str)
,但我认为您并不真正需要它从iOS的角度来看,CC_LONG(又称uint32_t)和size_t(unsigned LONG)是不兼容的大小,这一事实在某些应用程序中可能会引起安全性/稳定性问题,特别是在处理可重用库函数时 MD5散列是一个128位的散列,具有潜在的无限长消息,因此有理由发出此警告。如果截断长度大于2^32,则会产生错误的哈希 您的代码应该在逻辑上决定它可以支持多大的字符串。在本例中,使用CC_MD5时,它必须是2^32字节
此代码不会显示任何警告,并且工作正常
- (NSString*) sha256 {
const char * pointer = [self UTF8String];
unsigned char result[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(pointer, (CC_LONG)strlen(pointer), result);
NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++)
{
[ret appendFormat:@"%02x",result[i]];
}
return ret;
}
-(NSString*)sha256{
常量字符*指针=[self UTF8String];
无符号字符结果[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(指针,(CC_LONG)strlen(指针),结果);
NSMutableString*ret=[NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
对于(int i=0;i(CC_LONG)strlen(str)
您使用的是什么类型的编译器/工具链和设置?这似乎有点太迂腐了。顺便问一下,为什么要将其标记为osx或自动引用计数…这两种方法中的任何一种都是零。@mah就像iOS编程问题标记为xcode
-为什么?如果我们ed Eclipse?不管怎样…这确实是一个警告…警告你理论上的大小可能比CC___________________________________okay@Daij-Djan Yep,我发现如果字符串长度超过4GB(在OS X上int
为4字节宽),则不太可能或可能出错。这只是一个警告,但我的应用程序每次运行时都会在这条线上出现故障。事实上,我已经修复了它,虽然它在这条线上出现故障,但原因不同。然而,这个答案仍然回答了原来的问题。摆脱了警告:感谢快速解决方案。它对我很有效。Thnk u很
- (NSString*) sha256 {
const char * pointer = [self UTF8String];
unsigned char result[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(pointer, (CC_LONG)strlen(pointer), result);
NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++)
{
[ret appendFormat:@"%02x",result[i]];
}
return ret;
}