Comment crypter la valeur NSSsortingng en utilisant DES dans l'iPhone?

J'ai utilisé le code suivant pour chiffrer la valeur NSSsortingng avec Key,

NSSsortingng *token = @"encryptValue"; NSSsortingng *key = @"encryptKey"; NSData * keyData = [key dataUsingEncoding: NSUTF8SsortingngEncoding]; NSData * plainData = [token dataUsingEncoding: NSUTF8SsortingngEncoding]; NSMutableData * encData = [NSMutableData dataWithLength: plainData.length + 256]; size_t bytesWritten = 0; CCCryptorStatus ccStatus = CCCrypt (kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [keyData bytes], kCCKeySizeDES, NULL, [plainData bytes], [plainData length], encData.mutableBytes, encData.length, &bytesWritten); encData.length = bytesWritten; NSSsortingng *encrypted = [[NSSsortingng alloc] initWithBytes:[encData bytes] length:[encData length] encoding: NSUTF8SsortingngEncoding]; NSLog(@"ENCRYPT : %@",encrypted); 

Mais je reçois (nul) le résultat. Y a-t-il quelque chose qui ne va pas? Comment crypter la valeur NSSsortingng?

Voici un moyen pour AES, probablement pour DES serait similaire, jetez un oeil cela fonctionne avec moi … Faire une nouvelle catégorie AES sur NSData
Pour NSData + AES.h

 #import <Foundation/Foundation.h> #import <CommonCrypto/CommonCryptor.h> @interface NSData (AES) - (NSData*) EncryptAES: (NSSsortingng *) key; - (NSData *) DecryptAES: (NSSsortingng *) key; @end 

Pour NSData + AES.m

  #import "NSData+AES.h" @implementation NSData(AES) - (NSData*) EncryptAES: (NSSsortingng *) key { char keyPtr[kCCKeySizeAES256+1]; bzero( keyPtr, sizeof(keyPtr) ); [key getCSsortingng: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF16SsortingngEncoding]; size_t numBytesEncrypted = 0; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); CCCryptorStatus result = CCCrypt( kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self bytes], [self length], buffer, bufferSize, &numBytesEncrypted ); if( result == kCCSuccess ) return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; return nil; } - (NSData *) DecryptAES: (NSSsortingng *) key { char keyPtr[kCCKeySizeAES256+1]; bzero( keyPtr, sizeof(keyPtr) ); [key getCSsortingng: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF16SsortingngEncoding]; size_t numBytesEncrypted = 0; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer_decrypt = malloc(bufferSize); CCCryptorStatus result = CCCrypt( kCCDecrypt , kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self bytes], [self length], buffer_decrypt, bufferSize, &numBytesEncrypted ); if( result == kCCSuccess ) return [NSData dataWithBytesNoCopy:buffer_decrypt length:numBytesEncrypted]; return nil; } @end 

Utilisation: Importer NSData + AES.h

 //Encryption NSSsortingng *mySsortingng = @"This is the content"; NSSsortingng *key = @"my secret key"; NSData *data = [mySsortingng dataUsingEncoding:NSUTF8SsortingngEncoding]; NSData *encryptedData = [data EncryptAES:key]; //Decryption NSSsortingng *decryptedSsortingng = [[[NSSsortingng alloc] initWithData:[encryptedData DecryptAES:key] encoding:NSUTF8SsortingngEncoding] autorelease]; // remove autorelease if using ARC 

Enfin j'ai fait avec le code suivant et maintenant son fonctionnement bien.

 - (NSSsortingng*) doCipher:(NSSsortingng*)encryptValue { const void *vplainText; size_t plainTextBufferSize = [encryptValue length]; vplainText = (const void *) [encryptValue UTF8Ssortingng]; CCCryptorStatus ccStatus; uint8_t *bufferPtr = NULL; size_t bufferPtrSize = 0; size_t movedBytes = 0; bufferPtrSize = (plainTextBufferSize + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1); bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t)); memset((void *)bufferPtr, 0x0, bufferPtrSize); Byte iv [] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef}; NSSsortingng *key = @"encryptKey"; const void *vkey = (const void *) [key UTF8Ssortingng]; ccStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, vkey, kCCKeySizeDES, iv, vplainText, plainTextBufferSize, (void *)bufferPtr, bufferPtrSize, &movedBytes); NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes]; NSSsortingng *result = [myData base64Encoding]; return result; }