2

RC2データを有効ビット64ビットのみで復号化しようとしています。

私は 64 ビットしか持てないので、呼び出す前にCCCryptメソッドを使用してキーをこの数のビットに減らす必要があることを理解しています。Apple の CommonCrypto ライブラリにはそのようなメソッドが見つからなかったので、見つけたこのkeyschedule メソッドを使用しています。

メソッドのパラメーターは次のとおりです。

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 の short int の長さであり、1 つの short が 2 バイトに等しいと考えているためです。したがって、.keyLengthCCCrypt64 * 2=128

オプションで何を送信すればよいかわかりません。kCCOptionPKCS7PaddingAESの例から取ったものを使用しました。利用可能なその他のオプションはkCCOptionECBMode、 およびCBCです。他の 2 つのオプションを試すと、 にcryptStatusなりますkCCSuccessが、データは常にnullです。成功を誤って報告していると思います。

私が「手動で正確さをチェックした」と言うとき、私はそれらの時点でのキーと暗号を、正常に動作する JavaScript 実装と比較したことを意味します。

Apple のライブラリ (CommonCrypt など) を使用して RC2 データを復号化するにはどうすればよいですか?

4

0 に答える 0