-2

次の関数を使用して復号化しようとしていますが、同じ暗号化された文字列を取得し続けます。

この理由は何でしょうか?

    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

    const void *vEncryptedText = [data bytes];
    size_t encryptedTextBufferSize = [data length];
    CCCryptorStatus ccStatus;
    uint8_t *bufferPtr = NULL;
    size_t bufferPtrSize = 0;
    size_t movedBytes = 0;
    bufferPtrSize = (encryptedTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
    bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
    memset((void *)bufferPtr, 0x0, bufferPtrSize);

    const void *vkey = (const void *) [@"123456789012345678901234" UTF8String];

    ccStatus = CCCrypt(kCCDecrypt,
                       kCCAlgorithm3DES,
                       kCCOptionECBMode | kCCOptionPKCS7Padding,
                       vkey,
                       kCCKeySize3DES,
                       NULL,
                       vEncryptedText,
                       encryptedTextBufferSize,
                       (void *)bufferPtr,
                       bufferPtrSize,
                       &movedBytes);

    NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
    return [myData base64EncodedStringWithOptions:0];

アップデート:

データを次のように変更しました。

NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:0];

まだ運がありません。入力暗号化文字列と同じ出力文字列を取得しています。

私は戻って問題を解決しました:

return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
4

1 に答える 1

1

暗号化されたデータが有効な UTF-8 でエンコードされた文字列であることは事実上不可能です。暗号化されたデータは、ランダムに見える配列または 8 ビットのバイトです。

したがって、最初の行:
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
は正しくありません。暗号化されたデータが実際に UTF-8 文字列である場合、おそらく Base64 または 16 進数にエンコードされています。

于 2016-08-16T13:57:55.963 に答える