看到的好东西,留着以后用得着,原文地址:
http://blog.csdn.net/shouqiangwei/article/details/12286503
一般我们在使用http或者socket上传或者下载文件的时候,经常会在完成之后经行一次MD5值得校验(尤其是在断点续传的时候用的更
多),校验MD5值是为了防止在传输的过程当中丢包或者数据包被篡改,在使用MD5之前呢我们应该先了解MD5的一些常识。MD5 百度百科
简单的来说:
1)、MD5是使用哈希算法计算文件或字符串的摘要,对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。128/ 8 = 16,也就是说MD5得到的是一组16字节长度的八进制。
2)、一般在使用的时候需要将它转换成十六进制输出,并且同时输出为小写。
在有了这些基础知识之后,计算MD5就没有那么大的难度了,最近在做大文件MD5计算的时候在网上搜到了一大堆ios MD5的代码,其中有一大部分都不能用,尤其是 使用
NSFileHandle* handle = [NSFileHandle fileHandleForReadingAtPath:_filePath]; 这种方法的,就最坑了,应为它永远读取的是文件的固定的位置,而并不是计算整个文件的MD5摘要,所以永远让你陷入尴尬的境地。例如:(
NSData* fileData = [handle readDataOfLength: 1024*8]; //永远读取的是从开始位置开始,1024*8长度的文件, 如果使用这种方法的话,必须在每次读取之前将文件读取的位置设置为指定的位置,应该使用NSFileHandle的 - (void)seekToFileOffset:(unsigned long long)offset;
)
下面贴上我找的能用的一段代码:亲测各个平台同一个计算出来的MD5值相同。(在使用的时候,可能会见
FileHashDefaultChunkSizeForReadingData 未定义的情况,那么你应该显示的在头文件里加入混定义:
#define FileHashDefaultChunkSizeForReadingData 1024*8
)
代码如下:
+(NSString*)getFileMD5WithPath:(NSString*)path
{
return (__bridge_transfer NSString *)FileMD5HashCreateWithPath((__bridge CFStringRef)path, FileHashDefaultChunkSizeForReadingData);
}
CFStringRef FileMD5HashCreateWithPath(CFStringRef filePath,size_t chunkSizeForReadingData) {
// Declare needed variables
CFStringRef result = NULL;
CFReadStreamRef readStream = NULL;
// Get the file URL
CFURLRef fileURL =
CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
(CFStringRef)filePath,
kCFURLPOSIXPathStyle,
(Boolean)false);
if (!fileURL) goto done;
// Create and open the read stream
readStream = CFReadStreamCreateWithFile(kCFAllocatorDefault,
(CFURLRef)fileURL);
if (!readStream) goto done;
bool didSucceed = (bool)CFReadStreamOpen(readStream);
if (!didSucceed) goto done;
// Initialize the hash object
CC_MD5_CTX hashObject;
CC_MD5_Init(&hashObject);
// Make sure chunkSizeForReadingData is valid
if (!chunkSizeForReadingData) {
chunkSizeForReadingData = FileHashDefaultChunkSizeForReadingData;
}
// Feed the data to the hash object
bool hasMoreData = true;
while (hasMoreData) {
uint8_t buffer[chunkSizeForReadingData];
CFIndex readBytesCount = CFReadStreamRead(readStream,(UInt8 *)buffer,(CFIndex)sizeof(buffer));
if (readBytesCount == -1) break;
if (readBytesCount == 0) {
hasMoreData = false;
continue;
}
CC_MD5_Update(&hashObject,(const void *)buffer,(CC_LONG)readBytesCount);
}
// Check if the read operation succeeded
didSucceed = !hasMoreData;
// Compute the hash digest
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5_Final(digest, &hashObject);
// Abort if the read operation failed
if (!didSucceed) goto done;
// Compute the string result
char hash[2 * sizeof(digest) + 1];
for (size_t i = 0; i < sizeof(digest); ++i) {
snprintf(hash + (2 * i), 3, "%02x", (int)(digest[i]));
}
result = CFStringCreateWithCString(kCFAllocatorDefault,(const char *)hash,kCFStringEncodingUTF8);
done:
if (readStream) {
CFReadStreamClose(readStream);
CFRelease(readStream);
}
if (fileURL) {
CFRelease(fileURL);
}
return result;
}
相关推荐
4、读取ipa文件信息如:名称、包名、版本号、内部版本号、最小支持版本、证书有效期、文件路径、大小、md5等信息 IPA文件获取展示信息 CFBundleIconFiles icon CFBundleName | name CFBundleIdentifier | packge ...
所有摘要函数都可用于NSData 、 NSString和文件 - 以块读取,因此可以摘要任何大小的文件。 用法 [@"hello" md5]; [[NSData dataWithContentsOfFile:@"/file"] md5]; [NSString md5WithContentsOfFile:@"/file"];
资源资源请参考每个示例目录中的README.md以获取更多具体说明。样品清单S3TransferUtility-Sample( , )。 这是一个示例移动应用程序,演示了如何使用Amazon S3 PreSigned URL Builder在后台下载/上传文件。 涉及...
每个文件都会根据这个校验和进行 MD5 校验和命名,以避免任何冲突。 将/scripts的内容添加到 rake 范围内的项目中,并根据您最疯狂的愿望更新config.json 。 现在在你部署你的应用程序之前运行rake remote_assets:...
在我们日常的工作中,经常需要打包给测试进行测试,或者给产品经理体验。一次又一次的手动打包,修改plist文件,上传服务器浪费...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
GameScraper iOS应用对于项目文件,请导航到GameScraper / GameScraper文件。该项目是使用CocoaPods和CocoaPods HTMLKit在XCODE上开发的。请参阅“ Pods”存储库以获取相关文件。应用说明使用苹果的XCODE软件应用...
用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...
其中集成了,检测文件,MD5加密,Base64加密/解码,针对文件Base64加密处理,获取文件后戳,切割文件,合并文件等方法。 亲测可切割与合并有效:视频、mp3、jpg、apk!还有很多没测,讲道理应该是都可以的。合并效果...
MD5,SHA1加密解密 iOS动画合成 多线程操作 获取系统信息 字符串转数字 NSData转对象 对象转二进制NSData 将图标设置成圆形 设置UIView边框 图片质量压缩 改变图片大小 将日期格式转化成字符串 获取当前时间 返回字符...
Apress源代码 该存储库Molly Maskrey,Kim Topley,David Mark,Fredrik Olsson和JEFF LAMARCHE的(Apress,2016)。...请参阅文件Contributing.md,以获取有关如何为该存储库做出贡献的更多信息。
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写...
(更多详情、使用方法,请下载后细读README.md文件) Onvif 发现\nOnvifDiscovery 是一个简单的跨平台库,用于发现 ONVIF 兼容设备。\n我在哪里可以使用它\nOnvifDiscovery 以 .NET Standard 2.0 为目标,因此它可以在...
太新太旧的设备读取某些功能存在着有误的问题(Iphone11系列读取颜色会返回空值0/1 ,Iphone5s的CPU架构号也会返回错误),其他没测可自行尝试 2 .整体流程是:1.调用 AMDeviceNotificationSubscribe ,函数用来及时反馈...
源码AppPlus,App+是一个MD风格的用于传送、提取APK文件的开源工具软件。 优雅体面的提取APK 在工作过程中,有时需要反编译一些软件的APK,此时这些软件就存在于自己的手机,但是无法直接获得从手机中获取APK,...
对于Android yarn android 对于iOS yarn ios生产对于ios:使用Xcode打开文件ios / SGIItalia.xcworkspace并使用它构建项目对于android:要获取apk yarn android -- --variant=release 该apk将在android / app / ...
自述文件 使用漫威漫画 api 示例应用程序 使用 phonegap build 为 IOS ANDROID 和 WPHONE 生成应用程序 启动应用程序的步骤 为依赖项运行 npm install ...Angular MD5(生成哈希键) API奇迹 @拉戈迪
Apress源代码 该存储库随附Jayant Varma的 (Apress,2013年)。 使用绿色按钮将文件下载为zip格式,或使用Git将存储库克隆到您的计算机...请参阅文件Contributing.md,以获取有关如何为该存储库做出贡献的更多信息。
Apress源代码 该存储库随附Tim Duckett的(Apress,2015年)。 使用绿色按钮将文件下载为zip格式,或使用Git将存储库克隆到您的计算机上...请参阅文件Contributing.md,以获取有关如何为该存储库做出贡献的更多信息。
用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC框架 nfs-rpc nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用...
5. MD5加密(登陆密码校验加密等),用户统一Session、Cookie管理,统一验证码校验等。 6. 数据库连接池统一配置 7. Quartz定时调度任务集成(直接通过配置即可) 8. Httpclient破解验证码,登陆联通充值平台 9...