Php openssl签名是否支持Ed25519密钥?
据介绍,OpenSSL 1.1.1增加了对EdDSA(包括Ed25519)的支持。我正在用OpenSSL 1.1.1b运行PHP7.3.5,它应该支持它。我试着使用Ed25519(来自的那个)。这使我得到了以下错误(由Php openssl签名是否支持Ed25519密钥?,php,openssl,php-openssl,Php,Openssl,Php Openssl,据介绍,OpenSSL 1.1.1增加了对EdDSA(包括Ed25519)的支持。我正在用OpenSSL 1.1.1b运行PHP7.3.5,它应该支持它。我试着使用Ed25519(来自的那个)。这使我得到了以下错误(由openssl\u error\u string()返回),其中包含“没有公钥的Ed25519私钥”密钥 错误:0608D096:数字信封例程:EVP_PKEY_sign_init:此密钥类型不支持操作 “用属性和公钥编码的Ed25519私钥”密钥给我带来了另一个错误 警告:ope
openssl\u error\u string()
返回),其中包含“没有公钥的Ed25519私钥”密钥
错误:0608D096:数字信封例程:EVP_PKEY_sign_init:此密钥类型不支持操作
“用属性和公钥编码的Ed25519私钥”密钥给我带来了另一个错误
警告:openssl_sign():无法将提供的密钥参数强制转换为第3行/path/to/test.php中的私钥错误:0D078094:asn1编码例程:asn1_item_embed_d2i:序列长度不匹配
这就是我使用的代码
$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。我猜不支持,如果我们按照的话,签名/验证要求似乎与openssl库的正常使用不同 Ed25519和Ed448 EVP_PKEY实现支持密钥生成, 使用PureEdDSA和Ed25519或 Ed448(见RFC8032) 评论如下: PureEdDSA算法不支持使用EVP_DigestUpdate()等其他签名算法的流机制。必须使用一次性EVP_DigestSign()和EVP_DigestVerify()函数传递要签名或验证的消息 调用EVP_DigestSignInit()或EVP_DigestVerifyInit()时,摘要类型参数必须设置为NULL
因此,除非您可以直接调用openssl api,或者可以添加更多openssl glue函数来支持一次性签名/验证支持,否则我猜不会。如果我们按照,签名/验证要求似乎与openssl库的正常使用不同 Ed25519和Ed448 EVP_PKEY实现支持密钥生成, 使用PureEdDSA和Ed25519或 Ed448(见RFC8032) 评论如下: PureEdDSA算法不支持使用EVP_DigestUpdate()等其他签名算法的流机制。必须使用一次性EVP_DigestSign()和EVP_DigestVerify()函数传递要签名或验证的消息 调用EVP_DigestSignInit()或EVP_DigestVerifyInit()时,摘要类型参数必须设置为NULL 因此,除非您可以直接调用openssl api,或者可以添加更多openssl粘合函数来支持一次性签名/验证支持,否则我想不会