-1

PHP で Nano 秘密鍵、公開鍵、およびアドレス (暗号通貨) を生成しようとしています。秘密鍵の生成に成功しましたが、公開鍵を生成できず、その結果、チェックサムも整数アドレスも生成できませんでした。これを行うには、blake2b-512 アルゴリズムと ED25119 曲線を使用して秘密キーを暗号化し、公開キーを暗号化して blake2b-40 アルゴリズムを使用してチェックサムを取得する必要があります。それが私のコードです:

$privatekey = strtoupper(bin2hex(random_bytes(32)));
$publickey = sodium_crypto_sign_ed25519_pk_to_curve25519($private_key);
$checksum = hash(blake2b-40, $publickey);

必要なものが手に入りませんでした。なんで?

更新 2021/12/30 13:36

NanoSalt ライブラリで更新を解決しようとしていますが、次のエラーが表示されます。

index.php

<?php
use MikeRow\Salt\NanoSalt;

$nanoSalt = new NanoSalt();
$public_key = $nanoSalt->crypto_sign_public_from_secret_key(hex2bin("781186FB9EF17DB6E3D1056550D9FAE5D5BBADA6A6BC370E4CBB938B1DC71DA3"));
print(strtoupper($public_key->toHex()) . PHP_EOL);
?>

それがエラーです:

Fatal error: Uncaught Error: Class "MikeRow\Salt\NanoSalt" not found in C:\xampp\htdocs\Peppe\index.php:4 Stack trace: #0 {main} thrown in C:\xampp\htdocs\Peppe\index.php on line 4
4

2 に答える 2

0

PHP 7 >= 7.2.0 および PHP 8 には、特定の秘密 (秘密) キーから ED25519 公開キーを導出できる暗号化ライブラリ "sodium" が組み込まれています: https://www.php.net/manual/ en/function.sodium-crypto-sign-publickey-from-secretkey.php

以下は、このタスクの完全な実行例です。

<?php
function generateEd25519KeyPair()
{
    return sodium_crypto_sign_keypair();
}

function deriveEd25519PublicKey($privateKey)
{
    return sodium_crypto_sign_publickey_from_secretkey ($privateKey);
}

function base64Encoding($input)
{
    return base64_encode($input);
}

echo 'Generate ED25519 private and public key and derive public key from private key' . PHP_EOL;
$keyPair = generateEd25519KeyPair();
$privateKey = sodium_crypto_sign_secretkey($keyPair);
$publicKey = sodium_crypto_sign_publickey($keyPair);
echo'privateKey (Base64): ' . base64Encoding($privateKey) . PHP_EOL;
echo'publicKey (Base64):  ' . base64Encoding($publicKey) . PHP_EOL;

echo PHP_EOL . 'derive the publicKey from the privateKey' . PHP_EOL;
$publicKeyDerived = deriveEd25519PublicKey($privateKey);
echo'publicKey (Base64):  ' . base64Encoding($publicKeyDerived) . PHP_EOL;
?>
于 2021-12-28T15:47:35.530 に答える