0

我正在使用 NBitcoin nuget 包。我尝试创建私钥和公钥(地址)。之后,我尝试签署一些消息,然后使用 pub 密钥验证此签名。但是 NBitcoin ,用于使用具有私钥对象的 BitcoinSecret 对象进行验证。那么,为什么要使用这个对象来验证 NBitcoin?我如何在没有私钥的情况下验证签名,只使用地址(pubKey)、签名和消息?谢谢

     static void Main(string[] args)
            {

                Key Key = new Key(); //Create private key
                //We can take private key
                var privateKey = Key.GetBitcoinSecret(Network.Main);

               //Get the public key, and derive the address on the Main network
                BitcoinAddress address = privateKey.PubKey.GetAddress(Network.Main); 


                For the sign to data , create secret object.
                BitcoinSecret secret = new BitcoinSecret(Key, Network.Main);

                 string message = $"I am Nicolas";
                Console.WriteLine("Message:" + message + "\n");
                sign message with private key.
                string signature = secret.PrivateKey.SignMessage(message);
                Console.WriteLine("Signature:" + signature + "\n");






   /*      Now I dont understand this code. For the verify , I know that we need 
to signature message , message and pub or adres value.\n But in this code using
 again private secret object which has got private key.  How we can verify 
signature messaga with pub or address and message (dont include private key)*/
                if (secret.PubKey.VerifyMessage(message, signature))
                {
                    Console.WriteLine("thats okey");
                }


                Console.Read();

           }
4

1 回答 1

0

没有私钥就不能存在公钥,因为公钥是通过使用某种单向函数从私钥派生而来的。如果你想在没有私钥的情况下使用公钥,然后像你一样从私钥生成它

var pubKey = privateKey.PubKey;

将公钥存储到验证者可以访问的某个位置

File.WriteAllBytes("some/public/location/MyPubKey.key", pubKey.ToBytes());

让验证者在不知道私钥的情况下读取公钥

var pubKeyForVerification = File.ReadAllBytes("some/public/location/MyPubKey.key");

这就是它的全部。将公钥存储在您想要的任何地方都是安全的,因为从中学习私钥几乎是不可能的。

于 2018-02-15T22:57:57.727 回答