博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 对称算法DES加解密
阅读量:7260 次
发布时间:2019-06-29

本文共 4277 字,大约阅读时间需要 14 分钟。

// // NSString+DES.m // test // // Created by 范云飞 on 2018/5/4. // Copyright © 2018年 范云飞. All rights reserved. //

#import "NSString+DES.h"

#import <CommonCrypto/CommonDigest.h>

#import <CommonCrypto/CommonCryptor.h>

@implementation NSString (DES)

  • (NSData *)jm_hexStringConvertToBytesData { //异常字符串 if (self.length % 2 != 0) { return nil; }

    Byte bytes[1024*3] = {0};

    int bytesIndex = 0;

    for(int i = 0; i < [self length]; i++) {

    int int_char;  /// 两位16进制数转化后的10进制数    unichar hex_charUpper = [self characterAtIndex:i]; ///两位16进制数中的第一位(高位*16)  int int_charUpper;  if(hex_charUpper >= '0' && hex_charUpper <='9') {      int_charUpper = (hex_charUpper - 48 ) * 16;   // 0 的Ascll - 48  } else if(hex_charUpper >= 'A' && hex_charUpper <= 'F') {      int_charUpper = (hex_charUpper - 55 ) * 16; /// A 的Ascll - 65  } else {      int_charUpper = (hex_charUpper - 87 ) * 16; // a 的Ascll - 97  }    i++;    unichar hex_charLower = [self characterAtIndex:i]; ///两位16进制数中的第二位(低位)  int int_charLower;  if(hex_charLower >= '0' && hex_charLower <= '9') {      int_charLower = (hex_charLower - 48); /// 0 的Ascll - 48  } else if(hex_charUpper >= 'A' && hex_charUpper <='F') {      int_charLower = (hex_charLower - 55); ///  A 的Ascll - 65  } else {      int_charLower = hex_charLower - 87; /// a 的Ascll - 97  }    int_char = int_charUpper + int_charLower;  bytes[bytesIndex] = int_char;  ///将转化后的数放入Byte数组里  bytesIndex++;复制代码

    }

    NSUInteger dataLength = self.length / 2;

    NSData *data = [[NSData alloc] initWithBytes:bytes length:dataLength];

    return data; }

  • (NSString *)jm_urlDecode {

    NSString *decodedString = [self stringByRemovingPercentEncoding];

    return decodedString; }

  • (NSString *)jm_urlEncode {

    NSString encodedString = [self stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"!'();:@&=+$,/?%#[]"]];

    return encodedString; }

  • (NSString *)jm_encryptUseDESByKey:(NSString *)key iv:(NSString *)iv { NSString *ciphertext; NSString *encode = [self jm_urlEncode]; // NSLog(@"%s encode::%@", func, encode);

    NSData *data = [encode dataUsingEncoding:NSUTF8StringEncoding];

    NSUInteger dataLength = data.length;

    NSUInteger bufferLength = 1024;

    unsigned char buffer[bufferLength];

    memset(buffer, 0, sizeof(char));

    size_t numBytesEncrypted = 0;

    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, [iv UTF8String] , //iv向量 [data bytes], dataLength, buffer, bufferLength, &numBytesEncrypted);

    if (cryptStatus == kCCSuccess) {

    NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];  //NSLog(@"%s buffer::%s", __func__, buffer);  //NSLog(@"%s data::%@", __func__, data);    ciphertext = @"";  for (int index = 0; index < data.length; index++) {      char byte;      [data getBytes:&byte range:NSMakeRange(index, 1)];      NSString *text = [NSString stringWithFormat:@"%x", byte&0xff];            //不足两位,前面补0      if([text length] == 1) {          text = [NSString stringWithFormat:@"0%@", text];      }            ciphertext = [ciphertext stringByAppendingString:text];  }复制代码

    }

    NSLog(@"%s encryptText::%@", func, ciphertext); return ciphertext; }

  • (NSString *)jm_decryptUseDesByKey:(NSString *)key iv:(NSString *)iv { NSString *decryptText;

    NSData *encryptData = [self jm_hexStringConvertToBytesData];

    const char *textBytes = [encryptData bytes];

    NSUInteger dataLength = encryptData.length;

    NSUInteger bufferLength = dataLength + 0x8 & 0xfffffff8;

    unsigned char buffer[bufferLength];

    memset(buffer, 0, sizeof(char));

    size_t numBytesEncrypted = 0;

    //将encryptText转化为bytes CCCryptorStatus decryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, [iv UTF8String] , //iv向量 textBytes, dataLength, buffer, bufferLength, &numBytesEncrypted); if (decryptStatus == kCCSuccess ) {

    NSLog(@"%s buffer::%s", __func__, buffer);    NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];    NSLog(@"%s data::%@", __func__, data);    decryptText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];  NSLog(@"%s decryptText::%@", __func__, decryptText);    decryptText = [decryptText jm_urlDecode];  NSLog(@"%s decodeUrl::%@", __func__, decryptText);复制代码

    }

    return decryptText; }

@end

转载地址:http://cemdm.baihongyu.com/

你可能感兴趣的文章
Nginx map 使用详解
查看>>
用户 Outlook 2007 附件突然不能预览,在国外网站找了解决方案。
查看>>
SCCM 2007系列2 安装部署
查看>>
小米上市之后,雷军的下一个千亿业务在哪?
查看>>
Tomcat使用JDBC Realm配置Basic认证
查看>>
MongoDB数据关系建模
查看>>
JBPM6教程-10分钟玩转JBPM工作台
查看>>
拦截器实现文件过滤
查看>>
企业云桌面-05-准备虚拟机-031-exsi01-032-exsi02-033-exsi03
查看>>
八、IO优化(2)IO性能评估工具
查看>>
char *a 与char a[] 的区别
查看>>
CareerCup Google Interview 找到两个数的差为一个特定数
查看>>
js创建调用ocx对象的几种方法,检测ocx是否可用
查看>>
PhoneGap学习笔记
查看>>
交换机DHCP服务器中继代理配置
查看>>
#error
查看>>
在windows/MFC编程中如何设置窗口半透明
查看>>
打开Win7的telnet客户端
查看>>
性能计数器数据收集服务
查看>>
mySQL 教程 第4章 数据查询
查看>>