试试这个..它对我有用。
NSData *data = [NSString dataUsingEnconding:NSASCIIStringEncoding];
NSData *key = [self create3DesKey]; //This should be 24 characters, or 24 bytes
const void *vplainText;
size_t plainTextBufferSize;
plainTextBufferSize = [data length];
vplainText = (const void *)[data bytes];
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t movedBytes = 0;
bufferPtr = (uint8_t *) malloc( [data length] * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, [data length]);
NSString *initVec = @"init_Vec";
const void *vkey = (const void *) [key bytes];
const void *vinitVec = (const void *) [initVec UTF8String];
ccStatus = CCCrypt(kCCEncrypt,//encryptOrDecrypt,
kCCAlgorithm3DES,
plainTextBufferSize % 8 == 0 ? kCCOptionECBMode : KCCOptionPKCS7PAdding , //
vkey, //this should 24 bytes from 0x00 to 0xFF
kCCKeySize3DES,
vinitVec, //"init Vec", //iv,
vplainText, //This should be a multiple of 8 bytes or you will have to use KCCOptionPKCS7PAdding
plainTextBufferSize,
(void *)bufferPtr,
[data length],
&movedBytes);
NSString *result;
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result = [myData base64Encoding];
NSLog(@"%@", result);
应该使用此函数以正确的方式创建密钥:
-(NSData*)create3DesKey
{
NSMutableData *mData = [[NSMutableData alloc] init];
NSMutableData *mAuxData = [[NSMutableData alloc] init];
for(int i = 0; i < 16; ++i)
{
u_int32_t aux = arc4random() % 255;
[mData appendBytes:&aux length:1];
if(i < 8)
{
[mAuxData appendBytes:&aux length:1];
}
}
[mData appendData:mAuxData];
return mData;
}
我自己一直在解决它。请注意,createkey 函数会创建一个 EDE 密钥,该密钥声明密钥的前 8 个字节与最后 8 个字节完全相同。它也可以以所有 3 个 8 字节的块相同或完全不同的方式创建。您应该检查您的服务器处理哪一个。
希望能帮助到你。