[iOS]objective-c AESDES3DES等加密算法实现

    xiaoxiao2026-03-17  5

    objective-c对AES/DES/3DES等加密提供了统一的加密方法CCCrypt进行实现,目前主要支持的算法有 @constant kCCAlgorithmAES128 Advanced Encryption Standard @constant kCCAlgorithmAES Advanced Encryption Standard, 128-bit block @constant kCCAlgorithmDES Data Encryption Standard @constant kCCAlgorithm3DES Triple-DES, three key, EDE configuration @constant kCCAlgorithmCAST CAST @constant kCCAlgorithmRC4 RC4 stream cipher @constant kCCAlgorithmBlowfish Blowfish block cipher /*! @enum CCAlgorithm @abstract Encryption algorithms implemented by this module. @constant kCCAlgorithmAES128 Advanced Encryption Standard, 128-bit block This is kept for historical reasons. It's preferred now to use kCCAlgorithmAES since 128-bit blocks are part of the standard. @constant kCCAlgorithmAES Advanced Encryption Standard, 128-bit block @constant kCCAlgorithmDES Data Encryption Standard @constant kCCAlgorithm3DES Triple-DES, three key, EDE configuration @constant kCCAlgorithmCAST CAST @constant kCCAlgorithmRC4 RC4 stream cipher @constant kCCAlgorithmBlowfish Blowfish block cipher*/enum { kCCAlgorithmAES128 = 0, kCCAlgorithmAES = 0, kCCAlgorithmDES, kCCAlgorithm3DES, kCCAlgorithmCAST, kCCAlgorithmRC4, kCCAlgorithmRC2, kCCAlgorithmBlowfish}; 以下是DES的代码实现,可供使用的加密算法有des,3des,aes等,根据需要替换相应的参数即可。 - (NSString*) des:(NSString*) key{ const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.length]; CCCryptorStatus ccStatus; uint8_t *dataOut = NULL; size_t dataOutAvailable = 0; //size_t 是操作符sizeof返回的结果类型 size_t dataOutMoved = 0; dataOutAvailable = (data.length + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1); dataOut = malloc( dataOutAvailable * sizeof(uint8_t)); memset((void *)dataOut, 0x0, dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0 NSString *initIv = key; const void *vkey = (const void *) [key UTF8String]; const void *iv = (const void *) [initIv UTF8String]; //CCCrypt函数 加密/解密 ccStatus = CCCrypt(kCCEncrypt, // 加密/解密 kCCAlgorithmDES, // 加密根据哪个标准(des,3des,aes。。。。) kCCOptionPKCS7Padding, // 选项分组密码算法(des:对每块分组加一次密 3DES:对每块分组加三个不同的密) vkey, // 密钥 kCCKeySizeDES, // DES 密钥的大小(kCCKeySizeDES=8) iv, // 可选的初始矢量 [data bytes], // 数据的存储单元 data.length, // 数据的大小 (void *)dataOut, // 用于返回数据 dataOutAvailable, &dataOutMoved); NSString *result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding] autorelease]; return result;} 配合Base64方式使用 - (NSString*) des_base64:(NSString*) key{ const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.length]; CCCryptorStatus ccStatus; uint8_t *dataOut = NULL; size_t dataOutAvailable = 0; //size_t 是操作符sizeof返回的结果类型 size_t dataOutMoved = 0; dataOutAvailable = (data.length + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1); dataOut = malloc( dataOutAvailable * sizeof(uint8_t)); memset((void *)dataOut, 0x0, dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0 NSString *initIv = key; const void *vkey = (const void *) [key UTF8String]; const void *iv = (const void *) [initIv UTF8String]; //CCCrypt函数 加密/解密 ccStatus = CCCrypt(kCCEncrypt, // 加密/解密 kCCAlgorithmDES, // 加密根据哪个标准(des,3des,aes。。。。) kCCOptionPKCS7Padding, // 选项分组密码算法(des:对每块分组加一次密 3DES:对每块分组加三个不同的密) vkey, // 密钥 kCCKeySizeDES, // DES 密钥的大小(kCCKeySizeDES=8) iv, // 可选的初始矢量 [data bytes], // 数据的存储单元 data.length, // 数据的大小 (void *)dataOut, // 用于返回数据 dataOutAvailable, &dataOutMoved); NSData *dataFor = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved]; NSString *result = [GTMBase64 stringByEncodingData:dataFor]; return result;} -------------------------------------------------------------------------------------- - 版权声明: - 如在本页面内无特别说明,本文内容均为[李大仁博客]原创,本文版权归[李大仁博客]所有。 - 欢迎转载,转载请务必在文章页面明显位置提供原文链接并注明出处。欢迎您在转载本文时保留本段声明。 - 文章标题: [iOS]objective-c AES/DES/3DES等加密算法实现 - 独立博客: 李大仁博客 - 永久链接: http://www.lidaren.com/archives/1630 -------------------------------------------------------------------------------------- 以上内容由博客自动发布工具自动发布,最终显示内容和效果会与原文内容有所偏差,敬请谅解。
    转载请注明原文地址: https://ju.6miu.com/read-1308042.html
    最新回复(0)