Reputation: 33
I am trying to encrypt data in objective c with DES algorithm. Here is my code. I am getting my data :<> and encrypted str: from this code. Can anyone say what is wrong please?
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);
Upvotes: 2
Views: 3145
Reputation: 15589
Sample code ...
- (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;
}
}
Upvotes: 2