美文网首页
iOS AES和MD5加密

iOS AES和MD5加密

作者: 邓布利多教授 | 来源:发表于2020-01-20 10:32 被阅读0次

1、AES

.h文件

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface AESTool : NSObject

//NSData加密
+(NSData *)encryptWithData:(NSData *)data;

//NSData解密
+(NSData *)decryptWithData:(NSData *)data;

//NSSting加密
+(NSString *)encryptWithSting:(NSString *)string;

//NSSting解密
+(NSString *)decryptWithSting:(NSString *)string;

@end

NS_ASSUME_NONNULL_END

.m文件

#import "AESTool.h"
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>

//AES对称加密,加密解密用相同秘钥
#define AESKey @"AESKey"

@implementation AESTool

#pragma mark - Data-AES加密解密
+(NSData *)encryptWithData:(NSData *)data{
    return [self cryptWithCCOperation:kCCEncrypt data:data];
}

+(NSData *)decryptWithData:(NSData *)data{
    return [self cryptWithCCOperation:kCCDecrypt data:data];
}

+(NSData *)cryptWithCCOperation:(uint32_t)operation data:(NSData *)data{
    
    char keyLength[kCCKeySizeAES256 + 1];
    bzero(keyLength, sizeof(keyLength));
    [AESKey getCString:keyLength
             maxLength:sizeof(keyLength)
              encoding:NSUTF8StringEncoding];
    
    NSUInteger dataLength = [data length];
    size_t dataSize = dataLength + kCCBlockSizeAES128;
    void *dataOut = malloc(dataSize);
    size_t outSize = 0;
    
    CCCryptorStatus status = CCCrypt(operation,
                                     kCCAlgorithmAES128,
                                     kCCOptionPKCS7Padding | kCCOptionECBMode,
                                     keyLength,
                                     kCCBlockSizeAES128,
                                     NULL,
                                     [data bytes],
                                     dataLength,
                                     dataOut,
                                     dataSize,
                                     &outSize);
    if (status == kCCSuccess) {
        return [NSData dataWithBytesNoCopy:dataOut
                                    length:outSize];
    }
    
    free(dataOut);
    return nil;
    
}

#pragma mark - String-AES加密解密
+(NSString *)encryptWithSting:(NSString *)string{
    
    //避免字符串中包含中文造成的加密解密出错,先将字符串转成base64后再进行操作
    NSString *base64String = [self base64WithString:string];
    const char *cString = [base64String cStringUsingEncoding:NSUTF8StringEncoding];
    //对字符串加密处理同样需要先将字符串转成data类型,再进行加密
    NSData *data = [NSData dataWithBytes:cString length:base64String.length];
    NSData *result = [self encryptWithData:data];
    
    //转换为2进制字符串
    if (result && result.length > 0) {
        
        Byte *bytes = (Byte *)[result bytes];
        NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2];
        for(int i = 0; i < result.length; i++){
            [output appendFormat:@"%02x", bytes[i]];
        }
        return output;
        
    }
    return nil;
    
}

+(NSString *)decryptWithSting:(NSString *)string{
    
    //转换为2进制Data
    NSMutableData *data = [NSMutableData dataWithCapacity:string.length / 2];
    unsigned char bytes;
    char byteChars[3] = {'\0','\0','\0'};
    for (int i = 0; i < [string length] / 2; i++) {
        byteChars[0] = [string characterAtIndex:i * 2];
        byteChars[1] = [string characterAtIndex:i * 2 + 1];
        bytes = strtol(byteChars, NULL, 16);
        [data appendBytes:&bytes length:1];
    }
    
    //解密
    NSData *result = [self decryptWithData:data];
    if (result && result.length > 0) {
        //把base再转化为字符串
        NSString *base64String = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
        return [self stringWithBase64:base64String];
    }
    return nil;
    
}

+(NSString *)base64WithString:(NSString *)string{
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64 = [data base64EncodedStringWithOptions:0];
    return base64;
}

+(NSString *)stringWithBase64:(NSString *)base64{
    NSData *data = [[NSData alloc]initWithBase64EncodedString:base64 options:0];
    NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    return string;
}

@end

2、MD5

.h文件

#import <Foundation/Foundation.h>

@interface LYMD5 : NSObject

+(NSString *)md5:(NSString *)string;

@end

.m文件

#import "LYMD5.h"
#import "CommonCrypto/CommonDigest.h"

@implementation LYMD5

+(NSString *)md5:(NSString *)string{
    
    //32位小写
    const char *input = [string UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(input, (CC_LONG)strlen(input), result);

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

    return digest;
    
//    //32位大写
//    const char *input = [string UTF8String];
//    unsigned char result[CC_MD5_DIGEST_LENGTH];
//    CC_MD5(input, (CC_LONG)strlen(input), result);
//
//    NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
//    for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
//        [digest appendFormat:@"%02X", result[i]];
//    }
//
//    return digest;
    
//    //16位小写
//    NSString *md5Str = [self md5HashToLower32Bit];
//
//    NSString *string;
//    for (int i=0; i<24; i++) {
//    string = [md5Str substringWithRange:NSMakeRange(8, 16)];
//    }
//
//    return string;
    
//    //16位大写
//    NSString *md5Str = [self md5HashToUpper32Bit];
//
//    NSString *string;
//    for (int i=0; i<24; i++) {
//    string = [md5Str substringWithRange:NSMakeRange(8, 16)];
//    }
//
//    return string;
    
}

@end

相关文章

  • iOS 数据加密

    iOS 常用加密方式算法包括MD5加密、AES加密、BASE64加密 MD5加密 MD5:全称是Message D...

  • iOS加密

    iOS代码常见的加密方式包括MD5加密、AES加密、BASE64加密,RSA加密。 MD5加密 MD5是不可逆的只...

  • iOS代码加密常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • iOS常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • iOS 关于加密

    常见的iOS代码加密常用加密方式包括Base64加密、MD5加密、AES加密、RSA加密等。 Base64加密 B...

  • 玩转iOS常用加密模式

    iOS常用的加密方式 Base64加密 MD5加密 AES加密 RSA加密 直接上干货,理论性的知识,大家从网上自...

  • iOS 加密:MD5、BASE64、(AES)对称加密、非对称加

    iOS在安全方面所采用的的加密方式:MD5、BASE64、(AES)对称加密、非对称加密、DES(keychain...

  • MD5 加密的代码实现

    首先 加密可有对称加密(AES DES)和不对称加密(RSA)这篇我说的是MD5的加密方式。 MD5 叫哈希(摘要...

  • iOS开发各种加密方法

    小写md5 大写MD5 AES加密 3DES加密 document.body.oncopy = function ...

  • 加密

    来源于:MD5加密,Base64加密/解密,AES加密/解密

网友评论

      本文标题:iOS AES和MD5加密

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