【IOS学习之路】关于DES加密 神州付中使用到的DES加密方式
2013-03-04 10:35
513 查看
这几天苦于思索神州付中使用到的DES加密,DES加密在很多模式下出来的结果是完全不一样的,怎样去保持ios与java加密都是统一的。
这里我以神州付中的DES加密为力,可能不同的DES加密会有不同的方式,但是主要是体现在
在神州付中要作调整的地方主要是在
这里我以神州付中的DES加密为力,可能不同的DES加密会有不同的方式,但是主要是体现在
CCCrypt这个函数中,下面是他的原型
CCCryptorStatus CCCrypt( CCOperation op, /* kCCEncrypt, etc. */ CCAlgorithm alg, /* kCCAlgorithmAES128, etc. */ CCOptions options, /* kCCOptionPKCS7Padding, etc. */ const void *key, size_t keyLength, const void *iv, /* optional initialization vector */ const void *dataIn, /* optional per op and alg */ size_t dataInLength, void *dataOut, /* data RETURNED here */ size_t dataOutAvailable, size_t *dataOutMoved) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
在神州付中要作调整的地方主要是在
CCOptions options,
const void *key
options参数在mac支持:
NoPadding PKCS7Padding 而java支持: NoPadding ISO10126Padding OAEPPadding, OAEPWith<digest>And<mgf>Padding PKCS1Padding PKCS5Padding SSL3Padding NoPadding就是不填充,相当于自定义填充,显然太麻烦。 除此之外,就没有相同的了。 那么如何让iphone加密的数据,由服务器的java解开呢? mac的PKCS7Padding在java中没有,那麻烦了,试了一下,可以如下解决。 1.都用NoPadding,太痛苦,放弃 2.java下载扩展包,让java支持PKCS7Padding,可以考虑,但要服务器加java的扩展包 3.别使用AES算法了,使用DES或3DES等,因为它们的加密数据包单位长度是8字节,在8字节的情况下PKCS7Padding 等价与 PKCS5Padding。 mac不支持pkcs5 我手动传了 3 能实现 pkcs5padding 现在恍然大悟 kCCOptionPKCS7Padding|kCCOptionECBMode
- (NSString *)encryptUseDES:(NSString *)plainText key:(NSString *)key { Byte iv[] = {1,2,3,4,5,6,7,8}; NSString *ciphertext = nil; //const char *textBytes = [plainText UTF8String]; NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding]; NSUInteger dataLength = [plainText length]; unsigned char buffer[1024]; memset(buffer, 0, sizeof(char)); size_t numBytesEncrypted = 0; /*Byte *test = (Byte *)[[GTMBase64 decodeString:key] bytes]; for(int i=0;i<[[GTMBase64 decodeString:key] length];i++) { printf("testByte = %d\n",test[i]); }//*/ CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding | kCCOptionECBMode, [[GTMBase64 decodeString:key] bytes], kCCKeySizeDES, iv, [textData bytes], dataLength, buffer, 1024, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted]; /*Byte *test1 = (Byte *)[data bytes]; for(int i=0;i<[data length];i++) printf("testByte = %d\n",test1[i]);//*/ NSString *str5 = [[NSString alloc] initWithData:[GTMBase64 encodeData:data] encoding:NSUTF8StringEncoding]; return str5; } return ciphertext; }
相关文章推荐
- iOS开发学习专题-基础知识(二)NSArray数组NSMutableArray可变数组NSSet集合NSMutableSet可变集合详细使用方式
- php使用DES加密方式对图片内容进行加密处理
- 【IOS学习之路】iphone/ios 定位取得地址的两种方式
- IOS学习之路二十三(EGOImageLoading异步加载图片开源框架使用)
- iOS学习之——关于何时使用storyborad和xib
- iOS开发学习专题-基础知识(四) NSNumber容器 NSData数据 NSData转换的详细使用方式
- 关于iOS TDD&BDD的学习与使用
- iOS开发学习专题-基础知识(五) NSDate时间 NSUserDefaults本地存储 NSNotification系统通知的详细使用方式
- [EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇
- iOS学习笔记52-iOS 关于TestFlight的使用
- OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果同样
- 微软企业库5.0 学习之路——第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息
- IOS开发之—— 各种加密的使用(MD5,base64,DES,AES)
- iOS学习之路-UIPickerView初认识与使用
- 关于 Des加密(Android与ios 与后台java服务器之间的加密解密)
- android学习之路:关于使用ZIP命令打包APK
- 微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇
- mybatis学习之路----动态sql之if条件判断各种使用方式
- 工作中常常使用的几种加密以及签名的方式:DES加密
- iOS关于静态库的使用和制作注意和学习