Я пытаюсь реализовать шифрование RSA в своем приложении, используя SecKeyEncrypt и SecKeyDecrypt.Проблема в том, что только когда зашифрованный текст имеет длину KeyblockSize (128,256 и т. Д.), Я получаю его расшифрованный правильно.Кроме того, для каждой сборки и запуска я получаю разные результаты (зашифрованные данные и длина зашифрованного текста), сохраняя введенный простой текст одинаковым.А при очистке и сборке несколько раз, время от времени длина текста шифра становится размером ключа и поэтому расшифровывается должным образом.Пожалуйста, помогите понять, где проблема.Заранее спасибо
Примечание. Из определения SecKeyEncrypt стало известно, что последний параметр возвращает значение no.записанных байтов, т.е. длина шифрованного текста в байтах.Этот параметр всегда возвращает мой размер ключа для любой входной строки.Но во многих случаях фактическая длина зашифрованного текста зависит от этого параметра.И всякий раз, когда длина шифрованного текста совпадает с параметром, корректно дешифруется.
Отправка зашифрованных и дешифрованных частей моего кода:
- (void)encryptWithPublicKey:(uint8_t *)plainBuffer cipherBuffer:(uint8_t *)cipherBuffer
{
OSStatus status = noErr;
NSLog(@"** original plain text 0: %s", plainBuffer);
size_t plainBufferSize = strlen((char *)plainBuffer);//
size_t cipherBufferSize = CIPHER_BUFFER_SIZE;// its 1024
SecKeyRef key=[self getPublicKeyRef];
NSLog(@"SecKeyGetBlockSize() public = %lu", SecKeyGetBlockSize(key));//it returns 256
// Error handling
// Encrypt using the public.
status = SecKeyEncrypt([self getPublicKeyRef],
kSecPaddingNone,
plainBuffer,
plainBufferSize,
&cipherBuffer[0],
&cipherBufferSize
);
NSLog(@"encryption result code: %ld (size: %lu)", status, cipherBufferSize);
NSLog(@"encrypted text: %s", cipherBuffer);
}
- (void)decryptWithPrivateKey:(uint8_t *)cipherBuffer plainBuffer:(uint8_t *)plainBuffer
{
OSStatus status = noErr;
size_t cipherBufferSize = strlen((char *)cipherBuffer);
// DECRYPTION
size_t plainBufferSize = BUFFER_SIZE;//its 256
// Error handling
status = SecKeyDecrypt([self getPrivateKeyRef],
kSecPaddingNone,
&cipherBuffer[0],
cipherBufferSize,
&plainBuffer[0],
&plainBufferSize
);
NSLog(@"decryption result code: %ld (size: %lu)", status, plainBufferSize);
NSLog(@"FINAL decrypted text: %s", plainBuffer);
}