生成 256 位 ECDSA 私钥

Posted

技术标签:

【中文标题】生成 256 位 ECDSA 私钥【英文标题】:Generating the 256bit ECDSA private key 【发布时间】:2018-08-04 12:25:26 【问题描述】:

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

我用过这个sn-p:

$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】:

试试这个

$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;

【讨论】:

以上是关于生成 256 位 ECDSA 私钥的主要内容,如果未能解决你的问题,请参考以下文章

区块链教程之Bitcoin公钥和地址生成

如何在 C# 中加载私有 ecdsa 密钥 es256?

在没有 Bouncy Castle 的情况下,如何在 java 中从私有(ecdsa)生成公钥?

在 c# 中使用 ECDSA 生成证书

将 ECDSA 十六进制私钥转换为公钥

从私钥派生 ECDSA 公钥