微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自标准输入的 X25519 公钥加密

如何解决来自标准输入的 X25519 公钥加密

我想将从标准输入接收到的 C/C++ Linux 程序数据加密为 Curve25519 公钥(32 字节)。

cat file.bin | ./my-program 693c989d221e8367df764f23b97a348746a655126f0d0b037aaa8d9e3b73515e > file.bin.enc

由于无法直接使用 Cureve25519 公钥进行加密,我的想法是生成一个临时的 Curve25519 密钥并执行 ECDH 密钥生成。然后将使用此对称密钥执行 stdin 到 stdout 的加密。在这里我可以使用 AES-128-CBC。 我实际上更喜欢 XChaCha20poly1305。 由于数据不可用,我需要一个像通常的散列算法一样支持数据更新的 API。例如:

stream_init(&state,nonce,key);
stream_update(&state,plaintext,plaintext_len,ciphertext,&ciphertext_len); /* repeated calls*/
stream_final(&state,&ciphertext_len);

我查看了 libsodium、Crypto++、OpenSSL 和 GnuTLS 的 API/代码。但我找不到解决办法。还有一个问题是 nonce/IV 固定为 192 位(=12 字节),将输出限制为 ~256 GiB。

有谁知道是否有一个支持 XChaCha20poly1305,它只有 8 个字节的随机数和使用“更新”API 的任意输入长度?

(为了能够解密流,生成的公钥将在输出到 stdout 的开头)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。