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 バイトに等しいと考えているためです。したがって、.keyLength
CCCrypt
64 * 2=128
オプションで何を送信すればよいかわかりません。kCCOptionPKCS7Padding
AESの例から取ったものを使用しました。利用可能なその他のオプションはkCCOptionECBMode
、 およびCBC
です。他の 2 つのオプションを試すと、 にcryptStatus
なりますkCCSuccess
が、データは常にnull
です。成功を誤って報告していると思います。
私が「手動で正確さをチェックした」と言うとき、私はそれらの時点でのキーと暗号を、正常に動作する JavaScript 実装と比較したことを意味します。
Apple のライブラリ (CommonCrypt など) を使用して RC2 データを復号化するにはどうすればよいですか?