iPhone RSA кодирование текста + декодирование - PullRequest
4 голосов
/ 18 мая 2011

Что должно произойти.

Пользователь отправляет зашифрованное сообщение на сервер.Другой пользователь получает сообщение с сервера и затем расшифровывает его.И наоборот.

У меня есть текст в кодировке Unicode.Текст должен отправляться на сервер с использованием надписи RSA как часть JSON (например, {"message": ""})

Для кодирования текста я создаю функцию, в которой NSString является входным параметром и NSString в качестве выходного параметра.Дескрипторная функция имеет тот же формат.

Моя проблема : текст, который является результатом функции декодирования, отличается от того, который был закодирован.

-(NSString*) encryptText:(NSString*) text {

OSStatus status = noErr;

//text = @"ネイティブ英会話";
text = @"test text";

int length = [text lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
const char *cText = [text cStringUsingEncoding:NSUTF8StringEncoding];

size_t cipherBufferSize = BUFFER_SIZE;
if (cipherBufferSize < length) {
    cipherBufferSize = length;
}

char *cipherBuffer = malloc(cipherBufferSize);
memset(cipherBuffer, 0, cipherBufferSize);

NSLog(@"BEFORE SIPHER TEXT = %s", cText);

status = SecKeyEncrypt(_publicKey,
                       kSecPaddingNone,
                       (unsigned char*) cText,
                       length,
                       (unsigned char*) cipherBuffer,
                       &cipherBufferSize
                       );

NSLog(@"CIPHER TEXT = %s", cipherBuffer);

NSString *result = nil;

if (status == 0) {
    result = [NSString stringWithFormat:@"%s", cipherBuffer];
}

free(cipherBuffer);

return result;
}


-(NSString*) decriptText:(NSString*) encriptedText {

OSStatus status = noErr;

const char *cText = [encriptedText cStringUsingEncoding:NSUTF8StringEncoding];

int length = [encriptedText lengthOfBytesUsingEncoding:NSUTF8StringEncoding];

size_t plainBufferSize = BUFFER_SIZE;
if (plainBufferSize < length) {
    plainBufferSize = length;
}

char *plainBuffer = malloc(plainBufferSize);
memset(plainBuffer, 0, plainBufferSize);

NSLog(@"BEFORE DECIPHER TEXT = %s", cText);

status = SecKeyDecrypt(_privateKey,
                       kSecPaddingNone,
                       (unsigned char *) cText,
                       length,
                       (unsigned char *) plainBuffer,
                       &plainBufferSize
                       );

NSLog(@"AFTER DESIPHER BUFFER = %s status = %d", plainBuffer, status);

NSString *decriptedText = nil;

if (status == 0) {
    decriptedText = [NSString stringWithUTF8String:plainBuffer]; 
}

free(plainBuffer);

return decriptedText;
 }
...