目标c上的sha256哈希算法无法创建与服务器上生成的哈希匹配的哈希

时间:2016-02-24 12:37:47

标签: objective-c hash sha256

我使用以下代码创建文件的sha256哈希值,并与下游创建的哈希值进行比较。 我的代码创建的哈希似乎非常间歇性地失败。

-bash: bundle: command not found

希望有人可以帮我这个吗?哈希在99.9%的时间内正确生成,但很少失败。

编辑: 澄清, 在我的代码上生成的哈希与服务器在大多数时间生成的哈希相同。 但是,间歇性地,生成的哈希与下游生成的哈希不匹配。 我们使用其中一个在线散列网站检查了该文件,并且服务器生成的散列是正确的,而我的与该网站生成的散列不匹配(defuse.ca)

2 个答案:

答案 0 :(得分:1)

我不知道你的失败意味着什么,但这对我来说很好:

    NSString *pword=@"My text to apply hash";

    const char *s=[pword cStringUsingEncoding:NSASCIIStringEncoding];
    NSData *keyData=[NSData dataWithBytes:s length:strlen(s)];

    uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0};

    CC_SHA256(keyData.bytes, (CC_LONG)keyData.length, digest);

    NSData *out=[NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];

    NSString *hashData=[out description];
    hashData = [hashData stringByReplacingOccurrencesOfString:@" " withString:@""];
    hashData = [hashData stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hashData = [hashData stringByReplacingOccurrencesOfString:@">" withString:@""];

    return hashData;

答案 1 :(得分:1)

使用此函数向NSData类添加类别,并使用此类而不是描述。另请检查此字符串与服务器端字符串之间的十六进制字符串的大小写。

-(NSString *)hexEncodedString
{
    unsigned char *bytes = (unsigned char*)[self bytes];    
    NSInteger length = [self length];
    NSMutableString *hexEncodedString = [NSMutableString string];
    for (int i = 0; i < length; i++)
    {
        [hexEncodedString appendFormat:@"%0.2x", bytes[i]];
    }
    return hexEncodedString;
}