DES加密

DES是一种分组数据加密技术(先将数据分成固定长度的小数据块,之后进行加密),速度较快,适用于大量数据加密
3DES是一种基于DES的加密算法,使用3个不同密匙对同一个分组数据块进行3次加密,如此以使得密文强度更高。
相较于DES3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准。


使用前先下载GTMBase64 与 GTMDefines 文件;

用DES实现加密和解密的过程:(注释是我自己理解添加。不对的地方望指出)

.h文件中:

[objc]  view plain copy
  1. + (NSString *)encryptWithText:(NSString *)sText;//加密    
  2. + (NSString *)decryptWithText:(NSString *)sText;//解密    

.m文件中  (导包: #import "GTMBase64.h"(下面说)   #import <CommonCrypto/CommonCryptor.h>

[objc]  view plain copy
  1. + (NSString *)encryptWithText:(NSString *)sText    
  2. {    
  3.     //kCCEncrypt 加密    
  4.     return [self encrypt:sText encryptOrDecrypt:kCCEncrypt key:@"des"];    
  5. }    
  6.     
  7. + (NSString *)decryptWithText:(NSString *)sText    
  8. {    
  9.     //kCCDecrypt 解密    
  10.     return [self encrypt:sText encryptOrDecrypt:kCCDecrypt key:@"des"];    
  11. }    
  12.     
  13. + (NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation key:(NSString *)key    
  14. {    
  15.     const voidvoid *dataIn;    
  16.     size_t dataInLength;    
  17.         
  18.     if (encryptOperation == kCCDecrypt)//传递过来的是decrypt 解码    
  19.     {    
  20.         //解码 base64    
  21.         NSData *decryptData = [GTMBase64 decodeData:[sText dataUsingEncoding:NSUTF8StringEncoding]];//转成utf-8并decode    
  22.         dataInLength = [decryptData length];    
  23.         dataIn = [decryptData bytes];    
  24.     }    
  25.     else  //encrypt    
  26.     {    
  27.         NSData* encryptData = [sText dataUsingEncoding:NSUTF8StringEncoding];    
  28.         dataInLength = [encryptData length];    
  29.         dataIn = (const voidvoid *)[encryptData bytes];    
  30.     }    
  31.         
  32.     /*  
  33.      DES加密 :用CCCrypt函数加密一下,然后用base64编码下,传过去  
  34.      DES解密 :把收到的数据根据base64,decode一下,然后再用CCCrypt函数解密,得到原本的数据  
  35.      */    
  36.     CCCryptorStatus ccStatus;    
  37.     uint8_t *dataOut = NULL//可以理解位type/typedef 的缩写(有效的维护了代码,比如:一个人用int,一个人用long。最好用typedef来定义)    
  38.     size_t dataOutAvailable = 0//size_t  是操作符sizeof返回的结果类型    
  39.     size_t dataOutMoved = 0;    
  40.         
  41.     dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);    
  42.     dataOut = malloc( dataOutAvailable * sizeof(uint8_t));    
  43.     memset((voidvoid *)dataOut, 0x0, dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0    
  44.         
  45.     NSString *initIv = @"12345678";    
  46.     const voidvoid *vkey = (const voidvoid *) [key UTF8String];    
  47.     const voidvoid *iv = (const voidvoid *) [initIv UTF8String];    
  48.         
  49.     //CCCrypt函数 加密/解密    
  50.     ccStatus = CCCrypt(encryptOperation,//  加密/解密    
  51.                        kCCAlgorithmDES,//  加密根据哪个标准(des,3des,aes。。。。)    
  52.                        kCCOptionPKCS7Padding,//  选项分组密码算法(des:对每块分组加一次密  3DES:对每块分组加三个不同的密)    
  53.                        vkey,  //密钥    加密和解密的密钥必须一致    
  54.                        kCCKeySizeDES,//   DES 密钥的大小(kCCKeySizeDES=8)    
  55.                        iv, //  可选的初始矢量    
  56.                        dataIn, // 数据的存储单元    
  57.                        dataInLength,// 数据的大小    
  58.                        (voidvoid *)dataOut,// 用于返回数据    
  59.                        dataOutAvailable,    
  60.                        &dataOutMoved);    
  61.         
  62.     NSString *result = nil;    
  63.         
  64.     if (encryptOperation == kCCDecrypt)//encryptOperation==1  解码    
  65.     {    
  66.         //得到解密出来的data数据,改变为utf-8的字符串    
  67.         result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const voidvoid *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding] autorelease];    
  68.     }    
  69.     else //encryptOperation==0  (加密过程中,把加好密的数据转成base64的)    
  70.     {    
  71.         //编码 base64    
  72.         NSData *data = [NSData dataWithBytes:(const voidvoid *)dataOut length:(NSUInteger)dataOutMoved];    
  73.         result = [GTMBase64 stringByEncodingData:data];    
  74.     }    
  75.         
  76.     return result;    

你可能感兴趣的:(DES加密)