ios des 加/解密(with base64)
#include <CommonCrypto/CommonCryptor.h>
+ (NSString*)Encrypte:(NSString*)src key:(NSString*)key{NSString* retStr = nil;NSData* srcData = [src dataUsingEncoding:NSUTF8StringEncoding];size_t dataOutAvilable = ([srcData length] + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);unsigned char* dataOut = (unsigned char* )malloc(dataOutAvilable * sizeof(unsigned char));memset((void*)dataOut, 0x0, dataOutAvilable);size_t dataOutMoved = 0;Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};CCCryptorStatus ccStatus = CCCrypt(kCCEncrypt, kCCAlgorithm3DES, kCCOptionPKCS7Padding | kCCOptionECBMode, (void const*)[key UTF8String], kCCKeySize3DES, iv, [srcData bytes], [srcData length], (void*)dataOut, dataOutAvilable, &dataOutMoved);if (ccStatus == 0) {//成功 base64int base64Len = base64_encode_length(dataOutMoved) + 2;char* tmp = new char[base64Len];memset(tmp, 0, base64Len);int base64Ret = base64_encode((const char*)dataOut,dataOutMoved,tmp,base64Len);if (base64Ret > 0) {retStr = [[[NSString alloc] initWithUTF8String:tmp] autorelease];}delete []tmp;}//NSLog(@"ccStatus: %d EncrypteStr:%@",ccStatus,retStr);
    delete dataOut;return retStr;
}+ (NSString*)Decypte:(NSString*)src key:(NSString*)key{NSString* retStr = nil;int base64Len = base64_decode_length([src length]) + 2;char* tmp = new char[base64Len];memset(tmp, 0, base64Len);CCCryptorStatus ccStatus = kCCParamError;int base64Ret = base64_decode([src UTF8String], [src length],tmp, base64Len);if (base64Ret > 0) {size_t dataOutAvilable = (base64Len + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);unsigned char* dataOut = (unsigned char* )malloc(dataOutAvilable * sizeof(unsigned char));memset((void*)dataOut, 0x0, dataOutAvilable);size_t dataOutMoved = 0;Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};ccStatus = CCCrypt(kCCDecrypt, kCCAlgorithm3DES, kCCOptionPKCS7Padding | kCCOptionECBMode, (void const*)[key UTF8String], kCCKeySize3DES, iv, (const void*)tmp, base64Ret, (void*)dataOut, dataOutAvilable, &dataOutMoved);if (ccStatus == 0) {retStr = [[[NSString alloc] initWithBytes:dataOut length:dataOutMoved encoding:NSUTF8StringEncoding] autorelease];}delete dataOut;}//NSLog(@"ccStatus: %d Decypte:%@",ccStatus,retStr);
    delete []tmp;return retStr;
}

今天终于把ios平台下的DES加密算法调通了,在这里记录一下。说一下我遇到的问题吧。    

  第一,关于传参,Objective-C和C,C++一样,不能把值类型数组做为参数,传给另一个方法,方法的返回值的类型也一样不可以是值类型数组。一旦这么做了,接受参数的方法只能获取数组中的首元素。    

       解决方法是用 NSMutableData 把值类型的数组包一层,代码如下:    

      NSMutableData* bufkeyData =[NSMutableData dataWithLength:2];

      int* bufkey = bufkeyData.mutableBytes;    

        传参     [self make_key:bufkeyData number:j];

      取值    int* bufkey = bufkeyData.mutableBytes;       

  第二,NSData 与 Byte[]之间的转换

      NSData *btsData = http://www.cnblogs.com/upwifi/archive/2011/09/05/[in_strdataUsingEncoding:NSUTF8StringEncoding];

Byte *byteData = http://www.cnblogs.com/upwifi/archive/2011/09/05/(Byte*)malloc(len);

memcpy(byteData, [btsData bytes], len);

NSMutableData *bts2Data = http://www.cnblogs.com/upwifi/archive/2011/09/05/[NSMutableDatadataWithLength:len];

[bts2Data initWithBytes:byteData length:len];  

 

  第三,需要用一下 Base64 给加密前的和加密后的字串做Encod和Decode处理,我用了第三方的NSData+Base64.m    

下面是头文件:    

  

//

//  DesEncrypt.h

//  DesEncryptDemo

//

//  Created by fred yu on 9/2/11.

//  Copyright 2011 __MyCompanyName__. All rights reserved.

//

#import <Foundation/Foundation.h>

enum DesStrategy {

DesSimple = 1,

Des3 = 2,

DesCBC = 3,

DesTwoKeys = 4

};

typedef enum DesStrategy DesStrategy;

@interface DesEncrypt : NSObject {

NSMutableArray *keyArray;

}

-(NSData *)des:(NSData *)input_data key:(NSString *)key encrypt:(bool)encrypt;

//Encrypt

-(NSString*)encrypt:(NSString *)in_str key:(NSString *)key desMode:(DesStrategy)desMode str2:(NSString *)str2;

//Decrypt

-(NSString*)decrypt:(NSString *)in_str key:(NSString *)key desMode:(DesStrategy)desMode str2:(NSString *)str2;

//DesCBC

-(NSMutableData *)desCBC:(NSMutableData *)input_data key:(NSString *)key_str iv:(NSString *)iv encrypt:(bool)encrypt;

-(NSMutableData *)des:(NSMutableData *)data key:(NSMutableData *)key iv:(NSMutableData *)iv encrypt:(bool)encrypt;

//DesCreateKeys

-(void)desCreateKeys:(NSMutableData *)key;

//make_data

-(void)make_data:(NSMutableData *)data number:(int)number;

//make_key

-(NSMutableData *)make_key:(NSMutableData *)in_key number:(int)number;

//handle_data

-(NSMutableData *)handle_data:(NSMutableData *)data encrypt:(bool)encrypt;

//change_data

-(NSMutableData *)change_data:(NSMutableData *)olddata change_tbType:(int)change_tbType;

@end    

测试代码及输出结果:    

#import <Foundation/Foundation.h>

#import "DesEncrypt.h"

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// insert code here...

DesEncrypt * desEncrypt = [[DesEncrypt alloc] init];

NSString *key1 = @"12345678";

NSString *key2 = @"45678923";

NSString *msg = @"abcdefghijk";

NSLog(@"消息: %@",msg);

NSString *s = [desEncrypt encrypt:msg key:key1 desMode:DesCBC str2:key2];

NSLog(@"经过加密处理: %@",s);

NSString *ss = [desEncrypt decrypt:s key:key1 desMode:DesCBC str2:key2];

NSLog(@"经过解密处理: %@",ss);

[pool drain];

return 0;

}    

fred-yus-MacBook-Pro:~ fred$ /Users/fred/Documents/DesEncryptDemo/build/Debug/DesEncryptDemo ; exit;

2011-09-05 13:05:08.552 DesEncryptDemo[6085:903] 消息: abcdefghijk

2011-09-05 13:05:08.555 DesEncryptDemo[6085:903] 经过加密处理: vL5Am3KcszqpJdB594OrkA==

2011-09-05 13:05:08.555 DesEncryptDemo[6085:903] 经过解密处理: abcdefghijk

logout 

ios平台下的DES加密相关推荐

  1. 关于ios平台下的app的充值规则:

    链接:https://www.jianshu.com/p/d6761e820895 关于ios平台下的app的充值规则: 平台的充值的要求和规范 针对要求目前存在的设计 根据产品的付费属性设计 平台的 ...

  2. IOS、java支持DES加密

    最近在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当然不是看的原理,只是看看怎么能够实现.现在我们需要实现的是移动端和后台(java)数据加解密的配合,开始的时候考虑的使用RSA,因为RSA ...

  3. Mac平台下Opencv开发环境搭建

    OpenCV(Open Source Computer Vision Library),是一个开源的跨平台的计算机视觉库,它实现了图像处理和计算机视觉领域的很多通用算法,可以在多种计算机平台上运行,支 ...

  4. des加密 ios 和java_三重Des对称加密在Android、Ios 和Java 平台的实现

    // //  CommonFunc.m //  PRJ_base64 // //  Created by wangzhipeng on 12-11-29. //  Copyright (c) 2012 ...

  5. java ios des加密解密_IOS、java支持DES加密

    转载请注明博客地址:http://blog.csdn.net/mengxiangyue/article/details/40015727 近期在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当 ...

  6. iOS开发-DES加密解密算法

    前几天后台给了一个Java代码的加解密方式,让我这边直接用.我对应着Java上解密方法找到一些适合iOS的DES加解密算法,特总结一下 1.使用DES加密: //加密 +(NSString *) en ...

  7. iOS:DES加密iOS和Android的匹配

    android端的加密代码: public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";private s ...

  8. des 加密 iOS

    转载请注明原文出处 生成同名的Des.h文件和Des.m文件后,拷贝下方的代码可直接使用.注意在Des.m文件中将key值修改为项目所需的key.--->  #define DesKey 过程很 ...

  9. Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转)

    问题场景: 业务需要对接接口, 采用DES加密方式加密, 于是google一下go的DES加密方式, go的DES的默认隐藏了ECB模式, 因为go认为ECB不安全, 所以不建议使用,就隐藏了, 然而 ...

最新文章

  1. P2048 [NOI2010]超级钢琴
  2. UML用例图总结来源于网络
  3. xml操作excel
  4. Aqara 2021发布会:万物互联的家庭智慧全景
  5. U盘windows无法格式化的解决办法
  6. Eplan 2.7 ”没有可用加密狗“问题
  7. 万字长文带你回顾Java集合框架
  8. oracle11g数据库导入导出方法教程
  9. win10 C盘磁盘清理
  10. Dreamweaver开发人员工作区 标准工作区的区别
  11. FlashFXP,flashfxp建立ftp站点
  12. vue引入阿里巴巴矢量图库图标
  13. 30、【backtrader股票策略】《151 trading strategies》中的支撑与阻力策略(support and resistance)
  14. IOS多国语言Localize方法
  15. 舒城中学2021年高考成绩查询,舒城教育信息网——舒城县教育局关于对2019年荣获高考目标奖的学校和个人表彰的通报...
  16. 高斯PDF的性质及其推论
  17. Win10 1903过TP的双机调试
  18. pbe近似_量子化学中的主要近似
  19. Leetcode力扣 MySQL数据库 1468 计算税后工资
  20. 国内外知名的IT社区

热门文章

  1. jsr303jsp页面怎么显示错误信息_jsp校验信息不显示
  2. MySQL同表关联的id替换名称_MySQL JOIN用另一个表中的值替换ID
  3. Leetcode 21:Merge Two Sorted Lists(golang实现合并两条已经排序的链表)
  4. java实现大整数的加减乘除法(百练OJ:2736、2737、2980、2981)
  5. 笔记-中项案例题-2017年下-变更管理和配置管理
  6. 《系统集成项目管理工程师》必背100个知识点-15项目章程ITTO
  7. SpringBoot中使用常量类来判断对象某属性的值是否包含在指定集合中
  8. Winform中跨窗体设置ZedGraph的属性并刷新曲线图
  9. Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载)
  10. Shiro的Base64和MD5加密的使用