iOS开发 --- AES加解密(AES|ECB|PKCS7)

加密模式:ECB

填充(CCOptions):kCCOptionPKCS7Padding | kCCOptionECBMode

偏移量:NULL

key:16位 / 32位

//加密方法

+(NSString *)encryptAES:(NSString *)content key:(NSString *)key;

//解密方法

 +(NSString *)decryptAES:(NSString *)content key:(NSString *)key;

+(NSString *)encryptAES:(NSString *)content key:(NSString *)key{
   
    //为结束符'\0' +1
    char keyPtr[[key length]+1];//kCCKeySizeAES128,kCCKeySizeAES256
    memset(keyPtr, 0, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    //1,string转Data
    NSData *contentData = [content dataUsingEncoding:NSUTF8StringEncoding];
    NSUInteger contentDataLength = [contentData length];
    //密文长度 <= 明文程度 + BlockSize
    size_t bufferSize = contentDataLength + kCCBlockSizeAES128;//key:16位
    void *buffer = malloc(bufferSize);
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmAES,
                                          kCCOptionPKCS7Padding | kCCOptionECBMode,//ECB
                                          keyPtr,//key
                                          [key length],//key.length=16(kCCBlockSizeAES128)
                                          NULL,//ECB时iv为空
                                          contentData.bytes,
                                          contentDataLength,
                                          buffer,
                                          bufferSize,
                                          &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
       //2,Data转Data加密
        NSData *dataOut = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
       //3,Data转string Base64编码(系统方法)
        NSString *encryptStr = [dataOut base64EncodedStringWithOptions:0];
        return encryptStr;
    }
    free(buffer);
    return nil;
}
+(NSString *)decryptAES:(NSString *)content key:(NSString *)key{
   
    //为结束符'\0' +1
    char keyPtr[[key length]+1];//kCCKeySizeAES128,kCCKeySizeAES256
    memset(keyPtr, 0, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    //1,string转Data Base64解密(系统方法)
    NSData *contentData = [[NSData alloc]initWithBase64EncodedString:content options:0];
    NSUInteger contentDataLength = [contentData length];
    //密文长度 <= 明文程度 + BlockSize
    size_t bufferSize = contentDataLength + kCCBlockSizeAES128;//key:16位
    void *buffer = malloc(bufferSize);
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmAES,
                                          kCCOptionPKCS7Padding | kCCOptionECBMode,//ECB
                                          keyPtr,//key
                                          [key length],//key.length=16(kCCBlockSizeAES128)
                                          NULL,//ECB时iv为空
                                          contentData.bytes,
                                          contentDataLength,
                                          buffer,
                                          bufferSize,
                                          &numBytesDecrypted);
    if (cryptStatus == kCCSuccess) {
        //2,Data转Data 解密
        NSData *dataOut = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
        //3,Data转string UTF8
        NSString *decryptStr = [[NSString alloc] initWithData:dataOut encoding:NSUTF8StringEncoding];
        return decryptStr;
    }
    free(buffer);
    return nil;
}

相关文章

iOS开发-AES、DES加密

猜你喜欢

转载自blog.csdn.net/jiaxin_1105/article/details/115906731
今日推荐