根据OpenSSL ChangeLog,OpenSSL 1.1.1 添加了对 EdDSA(包括 Ed25519)的支持。我正在使用 OpenSSL 1.1.1b 运行 PHP 7.3.5,它应该支持它。我尝试使用 Ed25519(来自https://tools.ietf.org/html/rfc8410#section-10.3的那些)。openssl_error_string()使用“没有公钥的 Ed25519 私钥”密钥,这给我带来了以下错误(由 返回)。
错误:0608D096:数字信封例程:EVP_PKEY_sign_init:此密钥类型不支持操作
“用属性和公钥编码的 Ed25519 私钥”密钥给了我一个不同的错误。
警告:openssl_sign():在第 3 行错误错误:0D078094:asn1 编码例程:asn1_item_embed_d2i:序列长度不匹配,无法将提供的密钥参数强制转换为 /path/to/test.php 中的私钥
这是我使用的代码。
$r = openssl_sign('hello, world!', $signature, '-----BEGIN PRIVATE KEY-----
MHICAQEwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC
oB8wHQYKKoZIhvcNAQkJFDEPDA1DdXJkbGUgQ2hhaXJzgSEAGb9ECWmEzf6FQbrB
Z9w7lshQhqowtrbLDFw4rXAxZuE=
-----END PRIVATE KEY-----');
echo $r ? 'good' : 'bad';
echo "\n";
echo openssl_error_string();
我猜 PHP 还不支持 Ed25519。
慕尼黑8549860