Простой текст: шифрование и дешифрование текста с помощью алгоритма AES
Ключ (256): testsecret
Результат (https://aesencryption.net/): iFhSyFY3yYoO2G6GVGkdhZJjD + h0Pxv5fQnO3xIarzuGQSkIxlrpSprC5bC3gJ2U
Я использую небольшой код в объекте для расшифровки этого текста:
(NSData *) AES256DecryptWithKey: (NSString *) key {
// ключ должен быть 32 байта для AES256, в противном случае будет дополнен нулями
char keyPtr [kCCKeySizeAES256 + 1]; // комната для терминатора (не используется)
bzero (keyPtr, sizeof (keyPtr)); // заполняем нулями (для заполнения)
// получить данные ключа
[key getCString: keyPtr maxLength: sizeof (keyPtr) кодировка: NSUTF8StringEncoding];
NSUInteger dataLength = [собственная длина];
// См. Документ: для блочных шифров выходной размер всегда будет меньше или
// равен размеру ввода плюс размер одного блока.
// Вот почему нам нужно добавить размер одного блока здесь
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void * buffer = malloc (bufferSize);
size_t numBytesDecrypted = 0; // char iv [kCCBlockSizeAES128 + 1]; bzero (iv, sizeof (iv));
CCCryptorStatus cryptStatus = CCCrypt (kCCDecrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL / * вектор инициализации (необязательно) /,
[self bytes], dataLength, / input /
buffer, bufferSize, / output * /
& NumBytesDecrypted);
if (cryptStatus == kCCSuccess)
{
// возвращаемая NSData становится владельцем буфера и освобождает его при освобождении
return [NSMutableData dataWithBytesNoCopy: длина буфера: numBytesDecrypted];
}
свободный (буфер); // освободить буфер;
вернуть ноль; }
Результат: t \ PFLFC \ ^ X \ ^ C ^ \ ^^ \ ^ RWQV \ ^ \ ypt текст с алгоритмом AES
Кажется, это всегда неправильно первый 16-битный блок. Ты можешь мне помочь. что я не так при шифровании?