【问题标题】:iOS 3DES ECB DecryptioniOS 3DES ECB 解密
【发布时间】:2016-12-22 20:37:04
【问题描述】:

我正在尝试使用以下函数进行解密,但我不断得到相同的加密字符串。

这是什么原因?

    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

    const void *vEncryptedText = [data bytes];
    size_t encryptedTextBufferSize = [data length];
    CCCryptorStatus ccStatus;
    uint8_t *bufferPtr = NULL;
    size_t bufferPtrSize = 0;
    size_t movedBytes = 0;
    bufferPtrSize = (encryptedTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
    bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
    memset((void *)bufferPtr, 0x0, bufferPtrSize);

    const void *vkey = (const void *) [@"123456789012345678901234" UTF8String];

    ccStatus = CCCrypt(kCCDecrypt,
                       kCCAlgorithm3DES,
                       kCCOptionECBMode | kCCOptionPKCS7Padding,
                       vkey,
                       kCCKeySize3DES,
                       NULL,
                       vEncryptedText,
                       encryptedTextBufferSize,
                       (void *)bufferPtr,
                       bufferPtrSize,
                       &movedBytes);

    NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
    return [myData base64EncodedStringWithOptions:0];

更新:

我已将数据更改为:

NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:0];

仍然没有运气。我得到与输入加密字符串相同的输出字符串。

我已经通过返回解决了这个问题:

return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

【问题讨论】:

  • 解密尝试后 ccStatus 说什么?
  • 最好不要使用 3DES,它已被 AES 取代。不要使用 ECB 模式,它不安全,请参阅ECB mode,向下滚动到 Penguin。
  • 如果您需要帮助,您需要提供十六进制的示例输入和输出。解密代码本身并没有错误,只是缺少一个方法行来平衡返回语句。
  • ccStatus 为 kCCSuccess,我将添加示例输出和输入..
  • CCStatus 不表示解密是否正确,只表示参数没有错误,即编程错误。

标签: ios objective-c encryption 3des ecb


【解决方案1】:

加密数据几乎不可能是有效的 UTF-8 编码字符串,加密数据是一个看似随机的数组或 8 位字节。

因此第一行:
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
是不正确的。如果加密的数据确实是 UTF-8 字符串,则它可能已被编码为 Base64 或十六进制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    相关资源
    最近更新 更多