2016-04-21 2 views
2

Я использую эту категорию Objective-C для шифрования и дешифрования моих строки данных: https://gist.github.com/leeprobert/b83f07ca90ad657a1cd17f94b13138b1Каких кодирований мне нужно, чтобы расшифровать эту AES128 данные

и у меня есть категория NSString, как так:

@implementation NSString (AESCrypt) 

- (NSString *)AES128EncryptWithKey:(NSString *)key 
{ 
    NSData *plainData = [self dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *encryptedData = [plainData AES128EncryptedDataWithKey:key]; 

    NSString *encryptedString = [encryptedData base64Encoding]; 

    return encryptedString; 
} 

- (NSString *)AES128DecryptWithKey:(NSString *)key 
{ 
    NSData *plainData = [self dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *decryptedData = [plainData AES128DecryptedDataWithKey:key]; 

    NSString *decryptedString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding]; 

    return decryptedString; 
} 

@end 

Моя проблема заключается в том, что, когда я проверить это я получаю мусор:

NSString* stringToEncrypt = @"Mary had a little lamb"; 
     NSString* encryptedString = [stringToEncrypt AES128EncryptWithKey:eKey]; 
     NSString* decryptedString = [encryptedString AES128DecryptWithKey:eKey]; 

     NSLog(@"encryptedString = %@, decryptedString = %@", encryptedString, decryptedString); 

это войти как:

encryptedString = wLnJKED9oE4zC8dS9X7XskTs8kMTP59LUj8aatxW9+c=, decryptedString = (null) 

Я не уверен, что мне нужно выполнить base64encoding в процессе шифрования. Эта часть была чужим кодом. Я пытаюсь сделать расшифровку сейчас.

ответ

2

Вы не учли кодировку Base64 во время дешифрования. Вместо [self dataUsingEncoding:NSUTF8StringEncoding] вы должны использовать [[NSData alloc] initWithBase64EncodedString:self options:0].

Независимо от того, хотите ли вы использовать Base64, просто зависит от того, что вы делаете. Это удобный способ получения NSData (который является входом для ввода/дешифрования шифрования) и превращения его в строку с небольшим набором символов (A-Za-z0-9+/=).

+0

Вы избили меня! Я просто справился с этим, но вы получаете славу. Спасибо за ответ. :-) –

+0

Это был такой быстрый ответ, что я даже не могу его принять. Через 5 минут. –