ios使用des ecb解密base64编码字符串

ios使用des ecb解密base64编码字符串,ios,encryption,base64,des,ecb,Ios,Encryption,Base64,Des,Ecb,我试图解密一个字符串,该字符串首先在ecb模式下使用des加密,然后在base64中编码 这是我的代码: + (NSString *)decrypt:(NSString *)encryptedText { NSString *key = @"12345678"; NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:encryptedText options:0]; size_t numByte

我试图解密一个字符串,该字符串首先在ecb模式下使用des加密,然后在base64中编码

这是我的代码:

+ (NSString *)decrypt:(NSString *)encryptedText
{
    NSString *key = @"12345678";
    NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:encryptedText options:0];
    size_t numBytesDecrypted = 0;
    size_t bufferSize = [decodedData length] + kCCBlockSizeDES;
    void *buffer = malloc(bufferSize);
    char keyPtr[kCCKeySizeDES+1]; // room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];


    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                      kCCAlgorithmDES,
                                      kCCOptionPKCS7Padding | kCCOptionECBMode,
                                      keyPtr,
                                      kCCKeySizeAES256,
                                      NULL /* initialization vector (optional) */,
                                      [decodedData bytes], [decodedData length], /* input */
                                      buffer,       bufferSize, /* output */
                                      &numBytesDecrypted);

    NSData *val = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
    return [[NSString alloc] initWithData:val encoding:NSUTF8StringEncoding];
}

但是我得到了一个零字符串作为回报…有什么想法吗

您正在使用DES,但在调用:
CCCrypt
时,将密钥大小指定为:
kCCKeySizeAES256


从安全角度来看,这段代码有很多错误,不要在真正的应用程序中使用它。这不再是最佳做法。除此之外,应使用基于密码的密钥派生函数(如PBKDF2)将密码转换为密钥。使用DES和ECB模式也是一个缺点。

有趣的是,这是与今天早些时候的另一个问题相同的基本代码的复制/粘贴。这看起来像一个课堂项目。我可以向你保证这不是一个课堂项目。不过,我确实在其他地方找到了该代码。好吧,有趣的是,在同一天选择了相同的基本代码。我可以看到基本代码更简单,这是选择它的一个合理的理由。不幸的是,代码已经足够陈旧,不再是最佳实践,更好的替代方案是Rob Napier。加密方面被认为是一个缓解因素。我将数据编码成二维码,为了防止数据被轻易读取,我对数据进行了加密。即使有了解密的数据,也不会有太多的安全性被破坏……除非我花费更多的时间来保证安全性,否则我认为不值得这么做。考虑使用AES,它同样易于使用并提供更好的安全性。