ios平台下的DES加密
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加密相关推荐
- 关于ios平台下的app的充值规则:
链接:https://www.jianshu.com/p/d6761e820895 关于ios平台下的app的充值规则: 平台的充值的要求和规范 针对要求目前存在的设计 根据产品的付费属性设计 平台的 ...
- IOS、java支持DES加密
最近在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当然不是看的原理,只是看看怎么能够实现.现在我们需要实现的是移动端和后台(java)数据加解密的配合,开始的时候考虑的使用RSA,因为RSA ...
- Mac平台下Opencv开发环境搭建
OpenCV(Open Source Computer Vision Library),是一个开源的跨平台的计算机视觉库,它实现了图像处理和计算机视觉领域的很多通用算法,可以在多种计算机平台上运行,支 ...
- des加密 ios 和java_三重Des对称加密在Android、Ios 和Java 平台的实现
// // CommonFunc.m // PRJ_base64 // // Created by wangzhipeng on 12-11-29. // Copyright (c) 2012 ...
- java ios des加密解密_IOS、java支持DES加密
转载请注明博客地址:http://blog.csdn.net/mengxiangyue/article/details/40015727 近期在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当 ...
- iOS开发-DES加密解密算法
前几天后台给了一个Java代码的加解密方式,让我这边直接用.我对应着Java上解密方法找到一些适合iOS的DES加解密算法,特总结一下 1.使用DES加密: //加密 +(NSString *) en ...
- iOS:DES加密iOS和Android的匹配
android端的加密代码: public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";private s ...
- des 加密 iOS
转载请注明原文出处 生成同名的Des.h文件和Des.m文件后,拷贝下方的代码可直接使用.注意在Des.m文件中将key值修改为项目所需的key.---> #define DesKey 过程很 ...
- Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转)
问题场景: 业务需要对接接口, 采用DES加密方式加密, 于是google一下go的DES加密方式, go的DES的默认隐藏了ECB模式, 因为go认为ECB不安全, 所以不建议使用,就隐藏了, 然而 ...
最新文章
- P2048 [NOI2010]超级钢琴
- UML用例图总结来源于网络
- xml操作excel
- Aqara 2021发布会:万物互联的家庭智慧全景
- U盘windows无法格式化的解决办法
- Eplan 2.7 ”没有可用加密狗“问题
- 万字长文带你回顾Java集合框架
- oracle11g数据库导入导出方法教程
- win10 C盘磁盘清理
- Dreamweaver开发人员工作区 标准工作区的区别
- FlashFXP,flashfxp建立ftp站点
- vue引入阿里巴巴矢量图库图标
- 30、【backtrader股票策略】《151 trading strategies》中的支撑与阻力策略(support and resistance)
- IOS多国语言Localize方法
- 舒城中学2021年高考成绩查询,舒城教育信息网——舒城县教育局关于对2019年荣获高考目标奖的学校和个人表彰的通报...
- 高斯PDF的性质及其推论
- Win10 1903过TP的双机调试
- pbe近似_量子化学中的主要近似
- Leetcode力扣 MySQL数据库 1468 计算税后工资
- 国内外知名的IT社区
热门文章
- jsr303jsp页面怎么显示错误信息_jsp校验信息不显示
- MySQL同表关联的id替换名称_MySQL JOIN用另一个表中的值替换ID
- Leetcode 21:Merge Two Sorted Lists(golang实现合并两条已经排序的链表)
- java实现大整数的加减乘除法(百练OJ:2736、2737、2980、2981)
- 笔记-中项案例题-2017年下-变更管理和配置管理
- 《系统集成项目管理工程师》必背100个知识点-15项目章程ITTO
- SpringBoot中使用常量类来判断对象某属性的值是否包含在指定集合中
- Winform中跨窗体设置ZedGraph的属性并刷新曲线图
- Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载)
- Shiro的Base64和MD5加密的使用