CommonCrypto 機能に重大な問題があります。BlackBerry と Windows Mobile 用の 2 つの既存のアプリケーションがあり、どちらもデータ交換に ECB モードで Triple-DES 暗号化を使用します。どちらでも、暗号化された結果は同じです。
ここで、iPhone アプリケーションに 3DES 暗号化を実装したいので、CommonCrypto に直行しました。 http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-32207/CommonCrypto/CommonCryptor.h
CBC モードを使用するといくつかの結果が得られますが、Java または C# の結果とは一致しません。とにかく、ECB モードを使用したいのですが、これがまったく機能しません。パラメーター エラーが表示されます...
これは ECB モードの私の呼び出しです...私はそれを少し取り除きました:
const void *vplainText;
plainTextBufferSize = [@"Hello World!" length];
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
plainText = (const void *) [@"Hello World!" UTF8String];
NSString *key = @"abcdeabcdeabcdeabcdeabcd";
ccStatus = CCCrypt(kCCEncrypt,
kCCAlgorithm3DES,
kCCOptionECBMode,
key,
kCCKeySize3DES,
nil, // iv, not used with ECB
plainText,
plainTextBufferSize,
(void *)bufferPtr, // output
bufferPtrSize,
&movedBytes);
t は多かれ少なかれここからのコードです:http://discussions.apple.com/thread.jspa?messageID=9017515 しかし、すでに述べたように、毎回パラメーターエラーが発生します...
kCCOptionECBMode の代わりに kCCOptionPKCS7Padding を使用し、C# と iPhone コードで同じ初期化ベクトルを設定すると、iPhone で異なる結果が得られます。私の出力を bufferPtr から取得することで間違いはありますか? 現在、暗号化されたものを次のように取得しています。
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result = [[NSString alloc] initWithData:myData encoding:NSISOLatin1StringEncoding];
すべての設定を2回、異なるエンコーディングなどを試したようです...私のエラーはどこにありますか?