美文网首页
iOS AES 对称加密

iOS AES 对称加密

作者: 笔头还没烂 | 来源:发表于2020-10-20 15:14 被阅读0次

    直接上源码,如需自取即可:
    .h 文件代码如下:

    /**
     * 加密方法
     * @param enctyptString 加密字段
     * @param key 秘钥
     * @return 加密后base64值
     */
    + (NSString *)ky_encryptWithAES:(NSString *)enctyptString Key:(NSString *)key;
    
    /**
     * 解密方法
     * @param decryptString 解密字段
     * @param key 秘钥
     * @return 解密后字符
    */
    + (NSString *)ky_decryptWithAES:(NSString *)decryptString Key:(NSString *)key;
    

    .m 文件代码如下:

    #import <CommonCrypto/CommonCryptor.h>
    
    // MARK:加密方法
    + (NSString *)ky_encryptWithAES:(NSString *)enctyptString Key:(NSString *)key{
        NSData *contentData = [enctyptString dataUsingEncoding:NSUTF8StringEncoding];
        NSData *encrptData = [self AES128operation:kCCEncrypt data:contentData key:key];
        return [encrptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    }
    // MARK:解密方法
    + (NSString *)ky_decryptWithAES:(NSString *)decryptString Key:(NSString *)key{
        NSData *contentData = [[NSData alloc] initWithBase64EncodedString:decryptString options:NSDataBase64DecodingIgnoreUnknownCharacters];
        NSData *decryptedData = [self AES128operation:kCCDecrypt data:contentData key:key];
        return [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];
    }
    
    
    //MARK:AES128/ECB模式
    /**
     *  AES128加解密算法
     *  @param operation kCCEncrypt(加密)kCCDecrypt(解密)
     *  @param data      待操作Data数据
     *  @param key       key
     */
    + (NSData *)AES128operation:(CCOperation)operation data:(NSData *)data key:(NSString *)key{
        char keyPtr[kCCKeySizeAES128 + 1];  //kCCKeySizeAES128是加密位数 可以替换成256位的
        bzero(keyPtr, sizeof(keyPtr));
        [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
        size_t bufferSize = [data length] + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        size_t numBytesEncrypted = 0;
        
        /**
         *这里设置的参数ios默认为CBC加密方式,
         *如果需要其他加密方式如ECB,在kCCOptionPKCS7Padding这个参数后边加上kCCOptionECBMode
         *即kCCOptionPKCS7Padding | kCCOptionECBMode。
         *但是记得修改上边的偏移量,因为只有CBC模式有偏移量之说
        */
        CCCryptorStatus cryptorStatus = CCCrypt(operation, kCCAlgorithmAES128,
                                                kCCOptionPKCS7Padding | kCCOptionECBMode,
                                                keyPtr, kCCKeySizeAES128,
                                                NULL,
                                                [data bytes], [data length],
                                                buffer, bufferSize,
                                                &numBytesEncrypted);
        
        if(cryptorStatus == kCCSuccess) {
            NSLog(@"Success");
            return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
        } else {
            NSLog(@"Error");
        }
        free(buffer);
        return nil;
    }
    

    PS:
    加密和解密必须是同一个密钥,且密钥的长度无限制。

    相关文章

      网友评论

          本文标题:iOS AES 对称加密

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