0

暗号化されたデータをサーバーに送信するアプリケーションを開発しています。サーバーは、CFB8 でパディングなしの 3des を使用します。関連する質問のほとんどをstackoverflowで読みましたが、まだ機能しません。これに数日間取り組んでいますが、サーバーの暗号化と一致させることができません。これが私が試したものです-

 + (NSString*) doCipher:(NSString*)plainText operation:(CCOperation)encryptOrDecrypt {

        const void *vplainText;
        NSData* plainTextData;
        size_t plainTextBufferSize;

        if (encryptOrDecrypt == kCCDecrypt)
        {
           NSData *EncryptData =[NSData  dataWithBase64EncodedString:plainText];
        plainTextBufferSize = [EncryptData length];
        vplainText = [EncryptData bytes];
        }
        else
        {
             plainTextData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
        plainTextBufferSize = [plainTextData length];
        }

        CCCryptorStatus ccStatus;
        uint8_t *bufferPtr = NULL;
        size_t bufferPtrSize = 0;
        size_t movedBytes = 0;
         uint8_t iv[kCCBlockSize3DES];

        bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
        bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
        memset((void *)bufferPtr, 0x0, bufferPtrSize);
         memset((void *) iv, 0x0, (size_t) sizeof(iv));

        const void *vkey = kPrivateKey;
        unsigned char IV[8]={0,0,0,0,0,0,0,0};

        ccStatus = CCCrypt(encryptOrDecrypt,
                       kCCAlgorithm3DES,
                       0,
                       [keyData bytes],
                       [key length],
                       IV,
                       [plainTextData bytes],
                       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;

        if (encryptOrDecrypt == kCCDecrypt)
        {
            result = [[NSString alloc] initWithData: [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes] encoding:NSASCIIStringEncoding];
        }
        else
        {
            NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
            result = [myData base64EncodedString];
        }

        return result;
    }

CCOptions現在サポートkCCOptionPKCS7PaddingされているようですkCCOptionECBMode.CFB8でパディングなしで3desを達成する方法.どんな提案でも大歓迎です.

4

1 に答える 1