Шифрование DES с целью c

Я пытаюсь зашифровать данные в объекте c с помощью алгоритма DES. Вот мой код. Я получаю свои данные :‹> и зашифрованную строку: из этого кода. Кто-нибудь может сказать, что не так, пожалуйста?

    NSString *token = @"hello world";
    const void *vplainText;
    size_t plainTextBufferSize;

    plainTextBufferSize = [token length];
    vplainText = (const void *) [token UTF8String];

    uint8_t *bufferPtr = NULL;
    size_t bufferPtrSize = 0;
    size_t *movedBytes;

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

    NSString *key = [[NSString alloc] initWithString:@"12345678"];
    const void *vkey = (const void *) [key UTF8String];
    CCCryptorStatus cryptStatus =CCCrypt(
                            kCCEncrypt,         /* kCCEncrypt, etc. */
                            kCCAlgorithmDES,        /* kCCAlgorithmAES128, etc. */
                           kCCOptionPKCS7Padding | kCCOptionECBMode,    /*kCCOptionPKCS7Padding, etc. */
                            vkey,
                            kCCKeySizeDES,
                            NULL,           /* optional initialization vector */
                            vplainText,     /* optional per op and alg */
                            plainTextBufferSize,
                            (void *)bufferPtr,          /* data RETURNED here */
                            bufferPtrSize,
                            movedBytes);

    NSString *result;

    NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
    NSLog(@"my data :%@",myData);


    result = [self base64Encoding:myData];
    NSLog(@"enrypted str: %@",result);

person user1765253    schedule 26.03.2013    source источник
comment
Какую ошибку вы получаете?   -  person Vignesh    schedule 26.03.2013
comment
Вы смотрели на свой cryptStatus?   -  person trumpetlicks    schedule 26.03.2013
comment
Как я могу посмотреть свой cryptStatus?   -  person user1765253    schedule 26.03.2013


Ответы (1)


Образец кода ...

- (void) testDES
{
    NSData * data = [OpenSSLProxy getRandomBytes:20]; // generate some random bytes
    NSData * key = [OpenSSLProxy getRandomBytes:kCCKeySizeDES];
    NSData * enc = [self encryptDESByKey:key data:data];
    NSData *dec = [self decryptDESByKey:key data:enc];
    STAssertEqualObjects(data, dec, @"");
}

- (NSData *)encryptDESByKey:(NSData *)key data:(NSData *)data
{
    size_t numBytesEncrypted = 0;
    size_t bufferSize = data.length + kCCBlockSizeDES;
    void *buffer = malloc(bufferSize);

    CCCryptorStatus result = CCCrypt( kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding,
                                     key.bytes, kCCKeySizeDES,
                                     NULL,
                                     data.bytes, data.length,
                                     buffer, bufferSize,
                                     &numBytesEncrypted);
    NSData *output = [NSData dataWithBytes:buffer length:numBytesEncrypted];
    free(buffer);
    if( result == kCCSuccess )
    {
        return output;
    } else {
        NSLog(@"Failed DES encrypt...");
        return nil;
    }
}

- (NSData *) decryptDESByKey:(NSData *)key data:(NSData *)data
{
   size_t numBytesEncrypted = 0;

    size_t bufferSize = data.length + kCCBlockSizeDES;
    void *buffer_decrypt = malloc(bufferSize);
    CCCryptorStatus result = CCCrypt( kCCDecrypt , kCCAlgorithmDES, kCCOptionPKCS7Padding,
                                     key.bytes, kCCKeySizeDES,
                                     NULL,
                                     data.bytes, data.length,
                                     buffer_decrypt, bufferSize,
                                     &numBytesEncrypted );

    NSData *output = [NSData dataWithBytes:buffer_decrypt length:numBytesEncrypted];
    free(buffer_decrypt);
    if( result == kCCSuccess )
    {
        return output;
    } else {
        NSLog(@"Failed DES decrypt ...");
        return nil;
    }
}
person karim    schedule 03.02.2014
comment
Просто хотел отметить, что этот код пропускает буфер! Вы можете просто использовать NSMutableData вместо буфера void *. - person casillic; 23.04.2014
comment
Да, спасибо. Я добавил бесплатное заявление. написанный для тестового кода давно. Я думаю, что использовал void *, вероятно, потому что CCCrypt легко принимает это. - person karim; 23.04.2014