iOS 超大文件MD5加密,超大文件hmac加密

1、在文件超过1G的时候,不能一次性放入内存之中,但是我们还是需要将这个文件进行md5加密,或者hmac系列的加密

这个时候我们需要用到一个系统的api——update系列的方法

注意:参数path为大文件所在的路径。
//MARK:大文件的MD5加密
+(NSString*)fileMD5:(NSString*)path
{
    NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:path];
    if( handle== nil ) return @"ERROR GETTING FILE MD5"; // file didnt exist

    CC_MD5_CTX md5;

    CC_MD5_Init(&md5);

    BOOL done = NO;
    while(!done)
    {
        NSData* fileData = [handle readDataOfLength:256];
        //        CHUNK_SIZE
        CC_MD5_Update(&md5, [fileData bytes], [fileData length]);
        if( [fileData length] == 0 ) done = YES;
    }
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5_Final(digest, &md5);
    NSString* s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                   digest[0], digest[1],
                   digest[2], digest[3],
                   digest[4], digest[5],
                   digest[6], digest[7],
                   digest[8], digest[9],
                   digest[10], digest[11],
                   digest[12], digest[13],
                   digest[14], digest[15]];
    return s;
}
//MARK:大文件的hmacSHA256加密
+ (NSString *)hmac:(NSString *)path withKey:(NSString *)key
{
    NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:path];

    if( handle== nil ) return @"ERROR GETTING FILE hmac"; // file didnt exist

    CCHmacContext ctx;

    const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];

    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];

    CCHmacInit(&ctx, kCCHmacAlgSHA256, cKey, strlen(cKey));

    BOOL done = NO;
    while(!done)
    {
        NSData* fileData = [handle readDataOfLength:256];

        CCHmacUpdate(&ctx, [fileData bytes], [fileData length]);

        if( [fileData length] == 0 ) done = YES;
    }

    CCHmacFinal(&ctx, cHMAC);

    NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)];

    const unsigned char *buffer = (const unsigned char *)[HMACData bytes];

    NSMutableString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2];

    for (int i = 0; i < HMACData.length; ++i){
        [HMAC appendFormat:@"%02x", buffer[i]];
    }

    return HMAC;
}

原文地址:https://www.cnblogs.com/yyyyyyyyqs/p/11451618.html

时间: 2024-10-12 02:56:47

iOS 超大文件MD5加密,超大文件hmac加密的相关文章

Java实现 Base64、MD5、MAC、HMAC加密(转)

开始对那些基本的加密还不怎么熟练,然后总结了些,写了一个测试:支持 Base64.MD5.MAC.HMAC加密,长话短说,我们都比较喜欢自己理解,看代码吧! 采用的输UTF-8的格式... package codec; import java.security.MessageDigest; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.c

Windows/Linux命令查看文件MD5,SHA1,SHA256 文件校验

windows: certutil -hashfile yourfilename.ext MD5 certutil -hashfile yourfilename.ext SHA1 certutil -hashfile yourfilename.ext SHA256 Linux: 原文地址:http://blog.51cto.com/sf1314/2123109

Java实现MD5加密和文件校验

MD5简介: MD5的全称:Message-Digest Algorithm 5(信息-摘要算法5) MD5的加密方式是一种哈希加密.一些主流的编程语言都已经实现了MD5的加密,所以如果你的程序或是系统涉及到在多种语言之间的校验,那么MD5可以是备选之一.不过因为MD5是采用哈希函数来进行的加密,所以它无关密钥,也就是说在确定了明文的情况下,MD5就可以加密.不过MD5是不可逆的,只能加密,不能解密. MD5加密字符串: public class Md5Util { // 标准的构造函数,调用m

文件中转站与超大附件

1.什么是文件中转站,有什么作用? 文件中转站提供大文件网络临时存储的服务,文件中转站可帮助您在多台电脑间灵活中转文件,如在您的家用电脑和工作用电脑间中转文件:同时还可以发送超大附件,解决传统邮件附件大小受限的问题. 2.什么是超大附件,与普通附件有什么不同? 我们知道普通“邮件附件”一般都是20M.30M(具体由管理员设置),还要担心对方邮箱能不能接收这么大的附件.现在,如果您的邮箱开通了文件中转站(位于网络硬盘中),您邮件的大附件可达到2G(具体由管理员设置),并且可发送到任何邮箱地址.收件

MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能

MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.security.MessageDigest; impor

密码、文件MD5加密,密码sha256、sha384、sha512Hex等加密

package encryption; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.util.Arrays; import org.apache.commons.code

IOS中把字符串加密/IOS中怎么样MD5加密/IOS中NSString分类的实现

看完过后,你会学到: 1学习IOS开发中的分类实现, 2以及类方法的书写, 3以及字符串的MD5加密/解密. ---------------------------wolfhous------------------ [1]新建工程,新建分类 [2]分类的命名方式以及类的选择 [3]书写NSString分类的类方法,以及实现类方法,以及MD5如何加密 [4]测试加密结果 [5]解密:直接百度MD5解密,随便点歌网站进去,输入解密KEY,在我这个Demo中, wolfhous正常加密44bf025

C# 计算文件MD5

因工作需要对文件进行是否被修改判断,整理的一段生成文件MD5码的代码: 1: public class FileHelper 2: { 3: /// <summary> 4: /// 对文件流进行MD5加密 5: /// </summary> 6: public static string MD5Stream(Stream stream) 7: { 8: MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 9

申请iOS发布证书.p12和描述文件.mobileprovision

iOS发布证书 用于发布到App Store,只有用iOS发布证书打包的IPA才能上架到苹果应用市场. 如果要真机调试请看发布iOS调试证书的创建教程. iOS真机调试介绍 一.创建iOS发布证书 iOS证书申请这里用到一个工具Appuploader,可以在win系统中辅助快速申请iOS证书,如果没有Mac也无所谓. 可以很快速的创建iOS推送证书 先安装好Appuploader安装教程 1.打开Appuploader,选择Certification 2.点击+ ADD类型会出现各种证书选项,根