iOS  DES加密的方法

这篇博客介绍了如何在iOS中实现DES加密算法,包括加密和解密过程。通过使用`CCCrypt`函数,结合Base64编码进行数据的加密和解密。文中提供了一个完整的DESEncrypt方法实现,该方法接受一个字符串和加密/解密标志作为参数,并返回加密或解密后的结果。同时,还提到了与服务器约定的密钥和初始向量的使用。
摘要由CSDN通过智能技术生成

#pragma mark- DES加密算法

+ (NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation

{

    const void *dataIn;

    size_t dataInLength;

    const NSString *key = @"  ";  //和服务器约定的key

    if (encryptOperation == kCCDecrypt)//传递过来的是decrypt 解码

    {

        //解码 base64

        NSData *decryptData = [GTMBase64 decodeData:[sText dataUsingEncoding:NSUTF8StringEncoding]];//转成utf-8decode

        dataInLength = [decryptData length];

        dataIn = [decryptData bytes];

    }

    else  //encrypt

    {

        NSData* encryptData = [sText dataUsingEncoding:NSUTF8StringEncoding];

        dataInLength = [encryptData length];

        dataIn = (const void *)[encryptData bytes];

    }

    

   

    CCCryptorStatus ccStatus;

    uint8_t *dataOut = NULL; //可以理解位type/typedef 的缩写(有效的维护了代码,比如:一个人用int,一个人用long。最好用typedef来定义)

    size_t dataOutAvailable = 0; //size_t  是操作符sizeof返回的结果类型

    size_t dataOutMoved = 0;

    

    dataOutAvailable = (dataInLength + 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(encryptOperation,//  加密/解密

                       kCCAlgorithmDES,//  加密根据哪个标准(des3desaes。。。。)

                       kCCOptionPKCS7Padding,//  选项分组密码算法(des:对每块分组加一次密  3DES:对每块分组加三个不同的密)

                       vkey,  //密钥    加密和解密的密钥必须一致

                       kCCKeySizeDES,//   DES 密钥的大小(kCCKeySizeDES=8

                       iv, //  可选的初始矢量

                       dataIn, // 数据的存储单元

                       dataInLength,// 数据的大小

                       (void *)dataOut,// 用于返回数据

                       dataOutAvailable,

                       &dataOutMoved);

    

    NSString *result = nil;

    

    if (encryptOperation == kCCDecrypt)//encryptOperation==1  解码

    {

        //得到解密出来的data数据,改变为utf-8的字符串

        result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding];

    }

    else //encryptOperation==0  (加密过程中,把加好密的数据转成base64的)

    {

        //编码 base64

        NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved];

        result = [GTMBase64 stringByEncodingData:data];

    }

    return result;

}



GTMBase64文件地址:https://app.yinxiang.com/shard/s70/nl/2147483647/1f2b9849-9a20-4c81-b218-2cb06ef421cf/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值