doudu9148 2019-02-21 14:40
浏览 227

带有OpenSSL的PHP​​中的chacha20-poly1305

I'm running PHP 7.2.8. According to openssl_get_cipher_methods chacha20-poly1305 is a supported algorithm:

echo in_array('chacha20-poly1305', openssl_get_cipher_methods()) ? 'yes' : 'no';

That outputs "yes".

So I tried to use 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);

That output a PHP warning:

Warning: openssl_encrypt(): The authenticated tag cannot be provided for cipher that doesn not support AEAD

$r was f4854428b8a8.

I was able to get the same output for r with chacha20 (ie. no poly1305 by doing this):

$r = openssl_encrypt(
    $plaintext,
    'chacha20',
    $key,
    OPENSSL_RAW_DATA,
    "\1\0\0\0" . $nonce
);

The fact that the output is the same means that the Poly1305 authentication code is neither being appended or prepended to the ciphertext.

My question is... how do I get the Poly1305 authentication code using OpenSSL in PHP?

Also, I'm aware that libsodium provides chacha20-poly1305 support but I am, none-the-less, still curious as to how it's supposed to work with OpenSSL.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
    • ¥20 关于URL获取的参数,无法执行二选一查询
    • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
    • ¥15 marlin编译错误,如何解决?
    • ¥15 有偿四位数,节约算法和扫描算法
    • ¥15 VUE项目怎么运行,系统打不开
    • ¥50 pointpillars等目标检测算法怎么融合注意力机制
    • ¥20 Vs code Mac系统 PHP Debug调试环境配置
    • ¥60 大一项目课,微信小程序
    • ¥15 求视频摘要youtube和ovp数据集