Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios DES解密问题_Ios_Iphone_Objective C_Encryption_Des - Fatal编程技术网

Ios DES解密问题

Ios DES解密问题,ios,iphone,objective-c,encryption,des,Ios,Iphone,Objective C,Encryption,Des,我在ECB模式下使用DES解密。我正在使用以下代码进行解密: NSString *token = @"kRAz86UoZd5tFKf0xv8TKg=="; NSString *key = @"meristem"; const void *vplainText; size_t plainTextBufferSize; NSData *EncryptData = [[NSData alloc] initWithBase64EncodedString:token options:0]; plain

我在ECB模式下使用DES解密。我正在使用以下代码进行解密:

NSString *token = @"kRAz86UoZd5tFKf0xv8TKg==";
NSString *key = @"meristem";

const void *vplainText;
size_t plainTextBufferSize;

NSData *EncryptData = [[NSData alloc] initWithBase64EncodedString:token options:0];
plainTextBufferSize = [EncryptData length];
vplainText = [EncryptData bytes];

//plainTextBufferSize = [token length];
//vplainText = (const void *) [token UTF8String];

CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes;

bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);

NSString *initVec = @"init Vec";
const void *vkey = (const void *) [key UTF8String];
const void *vinitVec;
vinitVec = (const void *) [initVec UTF8String];

ccStatus = CCCrypt(kCCDecrypt,
                   kCCAlgorithmDES,
                   kCCOptionPKCS7Padding | kCCOptionECBMode,
                   vkey, //"123456789012345678901234", //key
                   kCCKeySizeDES,
                   NULL,// vinitVec, //"init Vec", //iv,
                   vplainText, //"Your Name", //plainText,
                   plainTextBufferSize,
                   (void *)bufferPtr,
                   bufferPtrSize,
                   &movedBytes);

NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
NSString *decodedString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSLog(@"dis is data %@",decodedString);
在这里,您可以看到我的加密字符串是kRAz86UoZd5tFKf0xv8TKg==,其结果是vishal thakur。但是通过使用上面的代码进行解密,我只得到了vishal t。我不明白为什么我没有得到完整的字符串。请告诉我我做错了什么。

编辑: 我认为它与
plainTextBufferSize
有关,这导致了在
CCCrypt
函数中调用它时出现的问题


尝试在
CCCrypt
函数之前更改其值。

我已通过替换此行解决了问题

plainTextBufferSize = [EncryptData length];  
进入


尝试更大的缓冲区以获得结果。@Cy-4AH您能告诉我怎么做吗?不走运!:(但是我解决了这个问题,把这行代码改成了plainTextBufferSize=[EncryptData length];变成了plainTextBufferSize=[EncryptData length]+1;非常感谢!!不客气。(我没看到那行代码!
plainTextBufferSize=[EncryptData length];
:D)我知道问题出在
plainTextBufferSize
上,但我没有注意到这一行,我的第一个答案是完全错误的,因为您分配给
plainTextBufferSize
的任何值都将替换为
[EncryptData length]
。我对我的答案进行了编辑,以避免误导。建议:回答您自己的问题,并为可能有此问题的其他人接受答案。;)谢谢您的建议:)
plainTextBufferSize = [EncryptData length]+1;