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

sha256 hashing algorithm on objective c fails to create a hash that matches the hash generated on the server

我正在使用以下代码创建文件的 sha256 散列,并将其与下游创建的散列进行比较。 我的代码创建的散列似乎间歇性失败。

    unsigned char hash[CC_SHA256_DIGEST_LENGTH];

if ( CC_SHA256([data bytes], [data length], hash) ) {

    NSData *sha256 = [NSData dataWithBytes:hash length:CC_SHA256_DIGEST_LENGTH];


    NSString *hash=[sha256 description];
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];

    return hash;
}
return nil;

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

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

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

    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;

使用此功能将类别添加到 NSData class 并使用此功能代替说明。还要检查此字符串与服务器端字符串之间的十六进制字符串的大小写。

-(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;
}