iOS 以byte数组作为密钥的3des加密
来源:互联网 发布:js设置innerhtml 编辑:程序博客网 时间:2024/06/05 08:54
最近做3des加密的时候,服务器返回的byte数组作为密钥,网上的方法都是以字符串作为密钥。先将字符串进行utf8编码,再转换成data,这样和直接用byte数组进行加密是有区别的,转换后的data字节数增加了一倍,这时候怎么办呢?
首先 对密钥字符串进行处理,把16进制字符串转换为byte数组(nadata)
- (NSData *) stringToHexData{ int len = [self length] / 2; // Target length unsigned char *buf = malloc(len); unsigned char *whole_byte = buf; char byte_chars[3] = {'\0','\0','\0'}; int i; for (i=0; i < [self length] / 2; i++) { byte_chars[0] = [self characterAtIndex:i*2]; byte_chars[1] = [self characterAtIndex:i*2+1]; *whole_byte = strtol(byte_chars, NULL, 16); whole_byte++; } NSData *data = [NSData dataWithBytes:buf length:len]; free( buf ); return data;}
这样就得到了data的密钥,然后进行3des加密
+(NSString*)TripleDES:(NSString*)plainText andCCOperation:(CCOperation )encryptOrDecrypt anddata:(NSData*)data{ const void *vplainText; size_t plainTextBufferSize; if (encryptOrDecrypt == kCCDecrypt)//解密 { NSData *EncryptData = [GTMBase64 decodeData:[plainText dataUsingEncoding:NSUTF8StringEncoding]]; plainTextBufferSize = [EncryptData length]; vplainText = [EncryptData bytes]; } else //加密 { NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding]; plainTextBufferSize = [data length]; vplainText = (const void *)[data bytes]; } CCCryptorStatus ccStatus; uint8_t *bufferPtr = NULL; size_t bufferPtrSize = 0; size_t movedBytes = 0; bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1); bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t)); memset((void *)bufferPtr, 0x0, bufferPtrSize); // memset((void *) iv, 0x0, (size_t) sizeof(iv)); //const void *vkey = (const void *)[DESKEY UTF8String]; const void *vkey = (const void *)[data bytes]; // NSString *initVec = @"init Vec"; //const void *vinitVec = (const void *) [initVec UTF8String]; // Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF}; ccStatus = CCCrypt(encryptOrDecrypt, kCCAlgorithm3DES, kCCOptionPKCS7Padding | kCCOptionECBMode, vkey, kCCKeySize3DES, nil, vplainText, plainTextBufferSize, (void *)bufferPtr, bufferPtrSize, &movedBytes); NSString *result; if (encryptOrDecrypt == kCCDecrypt) { result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding]; } else { NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes]; result = [GTMBase64 stringByEncodingData:myData]; } return result;}
ok,这样就可以得到加密后的结果了
0 0
- iOS 以byte数组作为密钥的3des加密
- 以DES的方式实现对称加密,并提供密钥
- ios的DES加密
- iOS DES加密与3DES加密
- iOS的3DES加密写法
- sunjce iOS des 3des解密加密
- iOS下的DES加密
- iOS DES加密的例子
- iOS下的DES加密
- iOS下的DES加密
- 【iOS】关于DES的加密
- OpenSSL EVP_des_ede3_cbc CBC方式的3个密钥的3DES算法 加密解密
- C#实现3DES加密24位密钥
- JAVA 3DES 加密/解密 32位密钥
- C# 3DES加密及弱密钥处理
- iOS 3DES加密无盐值加密
- Oracle的DES加密(在方法中定义密钥、传递密钥并根据传递的密钥判断是否加密)
- des密钥的存储
- Map, Map and flatMap in Scala
- 冒泡排序算法
- 拓展欧几里得学习小记
- nc后台两张单同名字字段数据交换
- [POJ2104] K-th Number/[POJ2761] Feed the dogs
- iOS 以byte数组作为密钥的3des加密
- hdu1757
- HDU 2255 奔小康赚大钱 POJ 2195 Going Home 最大权完美匹配 KM算法
- 在Eclipse中安装Maven插件以及创建Maven项目
- Java学习个人笔记---Java数组内存
- button放在form表单导致点击按钮触发的ajax报错问题
- IOS 自动约束
- POJ 1564 Sum It Up
- noip1999 回文数 (模拟)