2

我正在尝试仅使用 64 个有效位来解密 RC2 数据。

由于我只能拥有 64 位,因此我的理解是,在调用之前,CCCrypt我必须使用一种方法将密钥减少到这么多位。由于我在 Apple 的 CommonCrypto 库中找不到任何此类方法,因此我正在使用我找到的这个密钥调度方法。

这些是方法的参数:

void rc2_keyschedule( unsigned short xkey[64], 
                     const unsigned char *key, 
                     unsigned len, 
                     unsigned bits ) 

对于实际的解密部分,我正在尝试使用一个使用 AES 256 的示例。这是我到目前为止所拥有的:

// setup the key to send to CCCrypt
unsigned char originalKey[16] = /* derived from some other method */;
unsigned short key[64];
unsigned effectiveBits = 64;
rc2_keyschedule(key, originalKey, 16, effectiveBits);
// key is now 128 bytes, and I manually checked it for accuracy

// setup the cipherText to send to CCCrypt
NSData *cipherText = /* derived from some other method */;
// cipherText was manually checked for accuracy

// setup the buffer to send to CCCrypt
size_t bufferSize = [cipherText length] + kCCBlockSizeRC2;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;

// call CCCrypt
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, 
                                      kCCAlgorithmRC2, 
                                      kCCOptionPKCS7Padding,
                                      key, 128,
                                      NULL /* initialization vector (optional) */,
                                      [cipherText bytes], [cipherText length],
                                      buffer, bufferSize, /* output */
                                      &numBytesDecrypted);


if (cryptStatus == kCCSuccess) {
  return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}

free(buffer); //free the buffer;
return nil;

当我运行它时,cryptStatus其值kCCDecodeError记录为:

@constant kCCDecodeError 输入数据未正确解码或解密。

我发送to128的原因是因为我的密钥长度为 64 个短整数,我相信 1 个短整数等于 2 个字节。因此,.keyLengthCCCrypt64 * 2=128

我不知道我需要为该选项发送什么。我刚刚使用kCCOptionPKCS7Padding了取自 AES 示例的内容。其他可用选项是kCCOptionECBModeCBC。当我尝试其他两个选项时,cryptStatus确实变为kCCSuccess,但数据始终为null. 我认为它错误地报告了成功。

当我说我“手动检查某些内容的准确性”时,我的意思是我将这些点的密钥和密码与成功运行的 JavaScript 实现进行了比较。

如何使用 Apple 的库(即 CommonCrypt)解密 RC2 数据?

4

0 回答 0