【发布时间】:2014-04-04 01:01:04
【问题描述】:
我正在尝试解密一个字符串,该字符串首先在 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];
}
但是我得到一个零字符串作为回报......有什么想法吗?
【问题讨论】:
-
有趣的是,这是与今天早些时候的另一个问题相同的基本代码的复制/粘贴。这看起来像一个班级项目。
-
我可以向你保证,这不是一个课堂项目。不过,我确实在其他地方找到了该代码。
-
好的,有趣的是在同一天选择了相同的基本代码。我可以看到基本代码更简单,这是选择它的合理理由。不幸的是,代码太老了,不再是最佳实践,更好的选择是 Rob Napier 的RNCryptor。
标签: ios encryption base64 des ecb