2

我正在尝试使用 DES 算法加密目标 c 中的数据。这是我的代码。我正在从这段代码中获取我的数据 :<> 和加密的 str: 。任何人都可以说有什么问题吗?

    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);
4

1 回答 1

2

示例代码...

- (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;
    }
}
于 2014-02-03T23:45:13.913 回答