Опция -k
в утилите OpenSSL enc выводит ключ AES и IV из вашей парольной фразы "FUUU". Вы можете использовать опцию -p
, чтобы OpenSSL напечатал ключ AES256 и IV, которые он получил:
$ echo -n "TEST1" | openssl enc -aes256 -k FUUU -nosalt -a -p
key=59C12FFF74992ED40F4DF80A56AB55AE7C513B17CB4B8CF8342E9444C7F7AF3B
iv =0BEE68AD25123B7076B91A5AFB549E33
bYbkQJcDFZt3y3UQEMbEeg==
AES256DecryptWithKey ожидает 32-байтовый ключ AES, как говорится в комментариях:
- (NSData *)AES256DecryptWithKey:(NSString *)key {
// 'key' should be 32 bytes for AES256, will be null-padded otherwise
char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
Но даже если вы преобразуете строку ключа из OpenSSL в строку байтов (не 64 символа ASCII. 32 байта), вы все равно не сможете расшифровать ее и вернуть исходную строку. Это потому, что OpenSSL использует IV, но AES256DecryptWithKey не является:
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesDecrypted);
(видите, что NULL передается для IV? Это не сработает для вас)
Таким образом, вам нужно использовать метод шифрования и дешифрования, который использует один и тот же ключ AES и IV для этого.