iOS-计算文件Hash值

作者: FlyElephant | 来源:发表于2019-04-03 09:46 被阅读10次

文件在下载完成之后通常会进行Hash校验,因此客户端通过计算文件Hash值验证机制来确保文件上传下载后的完整性.计算方式比较常用的有MD5和SHA,两种计算方式不可逆和无冲突,其中MD5计算文件的Hash值较为普遍.

SHA加密

导入头文件

#include <CommonCrypto/CommonDigest.h>
+ (NSString *)computeHashForFile:(NSURL *)fileURL {
    NSString *fileContentsHash;
    if ([[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) {
        NSData *fileContents = [NSData dataWithContentsOfURL:fileURL];
        fileContentsHash = [self computeHashForData:fileContents];
    }
    return fileContentsHash;
}

+ (NSString *)computeHashForData:(NSData *)inputData {
    uint8_t digest[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(inputData.bytes, (CC_LONG)inputData.length, digest);
    NSMutableString* inputHash = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
    for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
        [inputHash appendFormat:@"%02x", digest[i]];
    }
    return inputHash;
}

MD5计算

+ (NSString *)computeHashForFile:(NSURL *)fileURL {
    NSString *fileContentsHash;
    if ([[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) {
        NSData *fileContents = [NSData dataWithContentsOfURL:fileURL];
        fileContentsHash = [self computeHashForData:fileContents];
    }
    return fileContentsHash;
}

+ (NSString *)computeHashForData:(NSData *)inputData {
    uint8_t digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5(inputData.bytes, (CC_LONG)inputData.length, digest);
    NSMutableString *inputHash = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [inputHash appendFormat:@"%02x", digest[i]];
    }
    return inputHash;
}

字符串Hash值计算:

+ (NSString *)computeHashForString:(NSString *)string {
    const char *cStr = [string UTF8String];
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cStr, (CC_LONG)strlen(cStr), digest);
    NSMutableString *hash = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [hash appendFormat:@"%02x", digest[i]];
    }
    return hash;
}

相关文章

  • iOS-计算文件Hash值

    文件在下载完成之后通常会进行Hash校验,因此客户端通过计算文件Hash值验证机制来确保文件上传下载后的完整性.计...

  • MySQL Hash索引 vs B-Tree索引

    Hash 索引通过 hash 算法计算 hash 值,存储的索引应该也是 hash 值,查找时先计算查找字段的 h...

  • 哈希值

    目前通用的确定电子数据文件是原件的技术方法就是计算和验证文件的哈希值(也称散列值、hash值)。一般思路是先计算并...

  • 性能优化技巧:有序分组

    一、 问题背景与适用场景 通常分组计算都采用hash方案,即先计算分组字段的hash值,hash值相同的记录被分拣...

  • 性能优化技巧:有序分组

    一、问题背景与适用场景 通常分组计算都采用hash方案,即先计算分组字段的hash值,hash值相同的记录被分拣到...

  • 计算文件哈希值

    什么是哈希值? 哈希值(hash values)是使用哈希函数(hash function)计算得到的值。哈希函数...

  • 获取单个文件的MD5值

    在线计算文件MD5值:http://www.atool9.com/file_hash.php 版本0 版本1(解决...

  • nginx 负载均衡之url_hash,least_conn

    如图所示,url_hash根ip_hash的区别就在于计算hash值从 hash(ip)到了hash(url),但...

  • HashMap

    1.哈希表底层采用的是何种算法计算hash值?还有哪些算法可以计算hash值? 1.底层采用的key 的hashc...

  • hash值, 监控工具, umask, 分区, inode和bl

    1. hash值 对文件进行hash运算, 生成一段哈希值, 对比自己的哈希值和发送文件给其他人后的哈希值, 检验...

网友评论

    本文标题:iOS-计算文件Hash值

    本文链接:https://www.haomeiwen.com/subject/gjtdhftx.html