Я использую PHP 7.2.8.Согласно openssl_get_cipher_methods
chacha20-poly1305 является поддерживаемым алгоритмом:
echo in_array('chacha20-poly1305', openssl_get_cipher_methods()) ? 'yes' : 'no';
, который выводит "да".
Поэтому я попытался использовать chacha20-poly1305
:
$plaintext = 'zzzzzz';
$key = str_repeat('k', 32);
$nonce = str_repeat('n', 12);
$aad = '';
$r = openssl_encrypt(
$plaintext,
'chacha20-poly1305',
$key,
OPENSSL_RAW_DATA,
$nonce,
$newtag,
$aad
);
echo bin2hex($r);
Это выводит предупреждение PHP:
Предупреждение: openssl_encrypt (): аутентифицированный тег не может быть предоставлен для шифра, который не поддерживает AEAD
$r
был f4854428b8a8
.
Мне удалось получить такой же вывод для r
с chacha20
(т.е. без poly1305
, выполнив это):
$r = openssl_encrypt(
$plaintext,
'chacha20',
$key,
OPENSSL_RAW_DATA,
"\1\0\0\0" . $nonce
);
Тот факт, чтовывод означает то же самое, что код аутентификации Poly1305 не добавляется и не добавляется к зашифрованному тексту.
У меня вопрос ... как получить код аутентификации Poly1305 с использованием OpenSSL в PHP?
Кроме того, я знаю, что libsodium предоставляет поддержку chacha20-poly1305, но мне, тем не менее, все еще интересно, как он должен работать с OpenSSL.