Что должно произойти.
Пользователь отправляет зашифрованное сообщение на сервер.Другой пользователь получает сообщение с сервера и затем расшифровывает его.И наоборот.
У меня есть текст в кодировке 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;
}