【问题标题】:DES decryption issueDES解密问题
【发布时间】:2014-02-28 08:45:29
【问题描述】:

我在 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。我不明白为什么没有得到完整的字符串。请谁能告诉我我做错了什么。

【问题讨论】:

  • 为结果尝试更大的缓冲区。
  • @Cy-4AH 你能告诉我我该怎么做吗?

标签: ios iphone objective-c encryption des


【解决方案1】:

我已经通过替换这一行解决了我的问题

plainTextBufferSize = [EncryptData length];  

进入

plainTextBufferSize = [EncryptData length]+1;

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不走运! :( 但我通过将这一行 plainTextBufferSize = [EncryptData length]; 更改为 plainTextBufferSize = [EncryptData length]+1; 解决了这个问题,非常感谢!!
    • 不客气。 (我没有看到那行代码!plainTextBufferSize = [EncryptData length]; :D)我知道问题出在plainTextBufferSize,但由于我没有注意到那行代码,所以我的第一个答案完全错误,因为您分配的任何值到 plainTextBufferSize 将被替换为 [EncryptData length]。我编辑了我的答案以不再具有误导性。
    • 并作为建议:回答您自己的问题并接受可能有此问题的其他人的答案。 ;)
    • 感谢您的建议 :)
    猜你喜欢
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多