首页 > 其他分享 >iOS的文件校验码生成 - ObjC编写

iOS的文件校验码生成 - ObjC编写

时间:2023-02-25 14:04:39浏览次数:46  
标签:CC iOS NSString 校验码 ObjC fullPath SHA256 digest MD5


一般我们比较文件的完整性,就是对文件进行哈希计算,通常就是MD5或者SHA256或者SHA1计算,如果生成的结果字符串是一样的,则表明文件没有被篡改

比如我们在网络上下载的安装包,下载时都会提示MD5或者SHA1的校验码是多少?有没有想过校验码是如何生成的了?以下就是用Objective-C来对文件计算checksum即校验码是否 服务器端存储的一致,如果是一致的,则表示文件是完整的

#import "FileChecksumUtil.h"
#import <CommonCrypto/CommonDigest.h>

@implementation FileChecksumUtil

// MD5 hash for file 对文件进行MD5 HASH计算
+ (NSString * _Nullable)md5HashForFileWithFullPath:(NSString *)fullPath {
NSFileManager *fileManager = [NSFileManager defaultManager];
// Make sure the file exists
if( [fileManager fileExistsAtPath:fullPath isDirectory:nil]) {
NSData *data = [NSData dataWithContentsOfFile:fullPath];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5(data.bytes, (CC_LONG)data.length, digest);

NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
return nil;
}

// 对文件进行SHA256 HASH计算
+ (NSString * _Nullable)sha256HashForFileWithFullPath:(NSString *)fullPath {
NSFileManager *fileManager = [NSFileManager defaultManager];
// Make sure the file exists
if( [fileManager fileExistsAtPath:fullPath isDirectory:nil] ) {
NSData *data = [NSData dataWithContentsOfFile:fullPath];
unsigned char digest[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(data.bytes, (CC_LONG)data.length, digest);

NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];

for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
return nil;
}

@end


// 测试
NSString *fullPath = @"/Users/victorzhang/Documents/20200730-资料.zip";
NSString *md5 = [FileChecksumUtil md5HashForFileWithFullPath:fullPath];
NSString *sha1 = [FileChecksumUtil sha256HashForFileWithFullPath:fullPath];

NSLog(@"MD5: %@", md5);
NSLog(@"SHA256: %@", sha1);

输出

MD5: db620a4c2f33899dfea298fb8377938b
SHA256: f6b77493ce07b40b25c6c2789284d92a7d23e0d68b95df766f1f2144f4fae6ad


标签:CC,iOS,NSString,校验码,ObjC,fullPath,SHA256,digest,MD5
From: https://blog.51cto.com/u_14062833/6085426

相关文章

  • 适配 iOS 13 设置 deviceToken
    在iOS13之前的版本使用下面代码可以将获取到的deviceToken,转为NSString类型,并去掉其中的空格和尖括号,作为参数传入setDeviceToken:方法中。-(void)application:(UI......
  • iOS日志记录和异常捕获
    日志记录iOS日志记录当前文件的堆栈、类名、函数名、行号及文件路径等信息NSArray*array=[NSThreadcallStackSymbols];NSLog(@"堆栈信息:%@",array);NSLog(@"当......
  • 在 Vue 项目中使用 axios 的三种方式
    首先npmiaxios,npm下载axios插件.第一种方式:直接在vue组件中导入axios,并直接引用.注意一点,axios是一个基于promise网络请求库,这意味着,你必须使......
  • IOS 实现OCR图片文字。从Tesseract到苹果自带OCR识别
    项目中需要实现识别图片文字功能,首先我们使用Tesseract来实现。但是它的识别效果很不精准。发现苹果自带Vision库效果非常好。而且现在支持的语言比较多。demo中支持了ipho......
  • iOS App上架App Store详细教程
    ​编辑编辑切换为居中添加图片注释,不超过140字(可选)​​注意:下载AU后需安装java8运行环境才能启动;安装好了最新Java8运行环境,解压AU软件包,无需安装,Windows64位系统点......
  • iOS App上架App Store详细教程
      ​编辑切换为居中添加图片注释,不超过140字(可选)注意:下载AU后需安装java8运行环境才能启动;安装好了最新Java8运行环境,解压AU软件包,无需......
  • Ios上架app无需688,xcode打包导出IPA,供人内测
    无需支付688苹果开发者账号,xcode打包导出ipa,提供他人进行内测众所周知,在开发苹果应用时需要使用签名(证书)才能进行打包安装苹果IPA,作为刚接触ios开发的同学,只是学习iosapp开......
  • 用Appuploader发布上传iOS APP上架
    Appuploader是一个IOS开发助手,可以快速,轻松地生成ios开发证书,不需要钥匙串助手;appuploader可以批量上传屏幕截图并将ipa文件上传到Apple商店,在windows,linux或mac上,不需要......
  • push证书申请_iOS上架App Store
    iOSAPP需要推送通知,要用到iOS推送证书,分为测试调试用的iOS推送证书和上架到AppStore的ios推送证书!iOS证书申请这里用到一个工具Appuploader,可以在win系统中辅助快速申请i......
  • iOS上架之使用appuploader创建构建版本的流程
    1、打开appuploader软件2、登录苹果开发者账号3、点击appuploader右上角的设置编辑切换为居中添加图片注释,不超过140字(可选)4、设置苹果app上传密码5、开始上传ipa的安装包......