私はObjective-Cは初めてですが、経験豊富な開発者(C#)ですが、これを理解できません:
RC4 で暗号化された文字列があり、iPad (iOS 5.0) で Objective-C を使用して復号化する必要があります。私はネット上で動作する例を探しましたが、エンドツーエンドで動作する例を見つけることができませんでした。以下のコードは、復号化された文字列を正しく返さないだけでなく、実行するたびに異なるものを返すため、ポインターがどこかで解放されているように感じます。
注:問題があるかどうかはわかりませんが、文字列はhttp://archive.plugins.jquery.com/project/RC4を使用して暗号化された後、Objective-C からアクセスしている Sqlite データベースにテキストとして保存されました。 (アーキテクチャがごちゃごちゃしているように聞こえますが、現時点では変更できません。)
私が使用しているコードは次のとおりです (RC4 暗号化から取得 - CommonCrypto (Objective-C) vs PHP ):
+ (NSString*)decryptData:(NSData*) dataToDecrypt
{
const void *vplainText;
size_t plainTextBufferSize;
plainTextBufferSize = [dataToDecrypt length];
vplainText = [dataToDecrypt bytes];
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
NSString *key = @"theKeyIUsedtoEncryptInTheFirstPlace";
const void *vkey = (const void *) [key UTF8String];
size_t keyLength = [[key dataUsingEncoding:NSUTF8StringEncoding] length];
ccStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmRC4,
0,
vkey,
kCCKeySizeDES,
nil,
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
/*else*/ if (ccStatus == kCCParamError) return @"PARAM ERROR";
else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";
else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";
else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";
else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";
else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED";
NSString *result = [[ NSString alloc ] initWithData: [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes] encoding:NSASCIIStringEncoding];
NSLog(@"%@", result);
return result;
}