生成256位ECDSA私钥

时间:2018-08-04 12:25:27

标签: php private-key ecdsa

我想用php制作一个ECDSA曲线的256位secp256k1私钥。

我使用了以下代码段:

$pk_Generate = openssl_pkey_new(array(
    'private_key_bits' => 256,
    'private_key_type' => OPENSSL_KEYTYPE_EC,
    'curve_name' => 'secp256k1'
));

while ($msg = openssl_error_string())
    echo $msg . "<br />\n";

openssl_pkey_export($pk_Generate, $pk_Generate_Private);
var_dump($pk_Generate_Private); // show me NULL

但是它给了我这个错误:

error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value

如果此代码也能正常工作,它会以PEM格式显示私钥,但我希望使用十六进制字符串格式。

请引导我。

1 个答案:

答案 0 :(得分:0)

尝试一下

$config = [
    "config" => getenv('OPENSSL_CONF'),
    'private_key_type' => OPENSSL_KEYTYPE_EC,
    'curve_name' => 'secp256k1'
];
$res = openssl_pkey_new($config);
if (!$res) {
    echo 'ERROR: Fail to generate private key. -> ' . openssl_error_string();
    exit;
}
// Generate Private Key
openssl_pkey_export($res, $priv_key, NULL, $config);
// Get The Public Key
$key_detail = openssl_pkey_get_details($res);
$pub_key = $key_detail["key"];

echo "priv_key:<br>".$priv_key;
echo "<br><br>pub_key:<br>".$pub_key;