标签: bitcoin

从ECDSA公钥生成比特币地址

我正在使用OpenSSL在C++中编写简单的代码来生成有效的比特币地址 - 私钥对.

我正在使用此代码段从给定的十六进制形式的私钥生成公钥:

#include <stdio.h>
#include <stdlib.h>
#include <openssl/ec.h>
#include <openssl/obj_mac.h>
#include <openssl/bn.h>

int main()
{
     EC_KEY *eckey = NULL;
     EC_POINT *pub_key = NULL;
     const EC_GROUP *group = NULL;
     BIGNUM start;
     BIGNUM *res;
     BN_CTX *ctx;



     BN_init(&start);
     ctx = BN_CTX_new(); // ctx is an optional buffer to save time from allocating and deallocating memory whenever required

     res = &start;
     BN_hex2bn(&res,"30caae2fcb7c34ecadfddc45e0a27e9103bd7cfc87730d7818cc096b1266a683");
     eckey = EC_KEY_new_by_curve_name(NID_secp256k1);
     group = EC_KEY_get0_group(eckey);
     pub_key = EC_POINT_new(group);

     EC_KEY_set_private_key(eckey, res);

     /* pub_key is a new uninitialized `EC_POINT*`.  priv_key res …
Run Code Online (Sandbox Code Playgroud)

c c++ openssl bitcoin

9
推荐指数
1
解决办法
8388
查看次数

从压缩的公钥中派生ECDSA未压缩的公钥

我目前正在尝试从压缩的公钥中派生出比特币未压缩的ECDSA公钥.

根据比特币维基上的这个链接,有可能这样做......但是怎么样?

为了给你更多细节:截至目前,我已经在比特币网络上收集了压缩密钥(33字节长).

它们具有以下格式:<1字节长前缀> <32字节长X>.从那里,我想获得一个未压缩的密钥(65字节长),其格式为:<1字节长前缀> <32字节长X> <32字节长Y>

根据比特币维基上的这个其他链接,它应该像解决方程一样简单:

Y ^ 2 = X ^ 3 + 7

但是,我似乎无法到达那里.我对Y的价值远远不够.这是我的代码(公钥的值来自比特币维基示例):

import binascii
from decimal import *

expected_uncompressed_key_hex = '0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6'
expected_y_hex = expected_uncompressed_key_hex[-64:]
expected_y_dec = int(expected_y_hex, 16)
x_hex = expected_uncompressed_key_hex[2:66]
if expected_y_dec % 2 == 0:
    prefix = "02"
else:
    prefix = "03"

artificial_compressed_key = prefix + x_hex

getcontext().prec = 500
test_dec = Decimal(int(x_hex, 16))
y_square_dec = test_dec**3 + 7
if prefix == …
Run Code Online (Sandbox Code Playgroud)

python public-key bitcoin ecdsa

9
推荐指数
2
解决办法
3049
查看次数

你如何分叉你已经分叉的上游的回购?

我想分叉namecoin/namecoin,但我已经分叉比特币/比特币.后者是前者的上游父母.叉链是:

比特币/比特币 - > vinced/namecoin - > namecoin/namecoin

当我分叉namecoin/namecoin时,Github只是将我重定向到我的myuserid/bitcoin fork,而不是创建一个新的myuserid/namecoin fork.在Github看来,他们是同一个项目,但事实并非如此.

有人知道怎么做吗?

github bitcoin

8
推荐指数
1
解决办法
686
查看次数

OpenSSL i2o_ECPublicKey无效

我有这个代码:

#include <stdio.h>
#include <openssl/sha.h>
#include <openssl/ssl.h>

int main(){
    printf("OpenSSL version: %s\n",OPENSSL_VERSION_TEXT);
    EC_KEY * key = EC_KEY_new_by_curve_name(NID_secp256k1);
    if(!EC_KEY_generate_key(key)){
        printf("GENERATE KEY FAIL\n"); 
        return 1;
    }
    u_int8_t pubSize = i2o_ECPublicKey(key, NULL);
    if(!pubSize){
        printf("PUB KEY TO DATA ZERO\n"); 
        return 1;
    }
    u_int8_t * pubKey = malloc(pubSize);
    if(i2o_ECPublicKey(key, &pubKey) != pubSize){
        printf("PUB KEY TO DATA FAIL\n"); 
        return 1;
    }
    u_int8_t * hash = malloc(SHA256_DIGEST_LENGTH);
    SHA256(pubKey, pubSize, hash);
    for (int x = 0; x < 32; x++) {
        printf("%.2x",hash[x]);
    }
    EC_KEY_free(key);
    free(pubKey);
    free(hash);
    return 0; …
Run Code Online (Sandbox Code Playgroud)

c heap openssl segmentation-fault bitcoin

8
推荐指数
1
解决办法
1673
查看次数

如何通过nodejs观察区块链上的比特币交易?

我正在使用这个bitcore npm包. https://bitcore.io/api/lib

我想监视区块链上的所有事务,并读取与该事务关联的输入地址,输出地址和数量.

但我无法找到要调用的javascript方法来完成此任务.即使我无法找到这方面的例子.

我正在寻找类似的东西

var someLib = require('some-bitcore-lib')

someLib.on('transaction-found', function(){
   // print everything
   console.log(arguments);
   // do something else;
})
Run Code Online (Sandbox Code Playgroud)

有帮助吗?我在哪里可以找到some-bitcore-lib或如何在nodejs中创建它?

node.js bitcoin blockchain

8
推荐指数
2
解决办法
2383
查看次数

Coinbase API v2 获取多天的历史价格

我在使用 Coinbase.com API 调用历史数据时遇到了一些问题。

以前,我得到了一个可变长度的天数,它与终端屏幕上的可用空间量相匹配,请求 URL 如下所示:

https://api.coinbase.com/v2/prices/historic?currency=USD&days=76
Run Code Online (Sandbox Code Playgroud)

这将拉取过去 76 天的价格历史记录。旧输出的一个例子在这里:https : //gist.github.com/KenDB3/f071a06ab3ef1a899d3cd8df8b40a049#file-coinbase-historic-days-example-2017-12-23-json

这几天前停止工作。我能得到的最接近的是这个请求 URL(虽然我没有得到我想要的数据):

https://api.coinbase.com/v2/prices/BTC-USD/historic?days=76
Run Code Online (Sandbox Code Playgroud)

输出可以在这里看到:https : //gist.github.com/KenDB3/f071a06ab3ef1a899d3cd8df8b40a049#file-coinbase-historic-days-example-2018-07-19-json

在第二个示例中,它仅显示查询当天不同时间的价格。我真正想要的是第一个示例输出,它每天给出一个价格,可以追溯到请求的天数。

这个连接的项目在这里:https : //github.com/KenDB3/SyncBTC

无效链接:https : //api.coinbase.com/v2/prices/historic?currency=BTC-USD&days=76 (无结果) https://api.coinbase.com/v2/prices/BTC-USD /historic?2018-07-15T00:00:00-04:00 (不提取7/15/2018 的数据)

bitcoin coinbase-api

8
推荐指数
1
解决办法
9451
查看次数

Bitstamp - C#中的新身份验证 - 签名

bitstamp的新身份验证说明如下:

Signature是HMAC-SHA256编码消息,包含:nonce,客户端ID和API密钥.必须使用通过API密钥生成的密钥生成HMAC-SHA256代码.此代码必须转换为十六进制表示形式(64个大写字符).示例(Python):message = nonce + client_id + api_key signature = hmac.new(API_SECRET,msg = message,digestmod = hashlib.sha256).hexdigest().上()

来源:链接

我有以下代码来添加新签名(和其他参数):

public void AddApiAuthentication(RestRequest restRequest)
    {
        var nonce = DateTime.Now.Ticks;
        var signature = GetSignature(nonce, apiKey, apiSecret, clientId);

        restRequest.AddParameter("key", apiKey);
        restRequest.AddParameter("signature", signature);
        restRequest.AddParameter("nonce", nonce);

    }

    private string GetSignature(long nonce, string key, string secret, string clientId)
    {
        string msg = string.Format("{0}{1}{2}", nonce,
            clientId,
            key);

        return ByteArrayToString(SignHMACSHA256(secret, StrinToByteArray(msg))).ToUpper();
    }
    public static byte[] SignHMACSHA256(String key, byte[] data)
    {
        HMACSHA256 hashMaker = new HMACSHA256(Encoding.ASCII.GetBytes(key));
        return hashMaker.ComputeHash(data);
    }

    public …
Run Code Online (Sandbox Code Playgroud)

c# security hash web-services bitcoin

7
推荐指数
1
解决办法
1813
查看次数

SHA-256有多少组合?

通过使用在线工具和维基百科我发现每个sha-256加密字符串是包含数字和字符的64个字符长.因此我假设有34 ^ 36个组合(2 ^ 216由代数计算器简化).经过一些研究后我发现大多数人说有2 ^ 256种组合.有人能解释一下吗 为了使上下文清晰,我写了一篇关于加密货币的论文,并尝试解释有多少不同的加密组合以及可以花多长时间(因此可以进行多少次猜测)并将其与总的原子数进行比较.宇宙(大约10 ^ 85).

sha256 bitcoin

7
推荐指数
3
解决办法
3421
查看次数

如何在 Python 中从种子生成比特币密钥/地址?

我正在尝试根据 BIP0039 的助记符创建一组公钥/私钥。我正在用Python工作。

这是我到目前为止的代码:

from mnemonic import Mnemonic
mnemon = Mnemonic('english')
words = mnemon.generate(256)
mnemon.check(words)
seed = mnemon.to_seed(words)
Run Code Online (Sandbox Code Playgroud)

在 BIP0039 中,据说您应该能够使用种子获取密钥,但我无法使用 bip32utils 在 Python 中找到它。有谁有如何使用 bip32utils 将种子转换为私钥/公钥及其各自地址的示例吗?

python cryptography bitcoin

7
推荐指数
1
解决办法
1万
查看次数

通过 C a #define(或其他代码/编译时解决方案)省略核心转储?

我知道操作系统有时会在发送信号时(通常在崩溃时)生成核心转储。有没有办法通过#define 或编译器标志从C/C++内部告诉操作系统不可以,或者可以通过该可执行文件生成某种特定限制的核心转储?我知道控制它的唯一方法是通过 ulimit -c。我的测试系统是Linux。无核心转储不需要在系统范围内实现,仅适用于特定程序。

对于感兴趣的人来说,这与Bitcoin Core 的 bitcoin-qt 中的CVE-2019-15947 有关,它仍然没有解决方案。

部分讨论位于比特币 GitHub 错误跟踪页面

另一种选择是对内存中的 wallet.dat 进行混淆和/或加密,这样就不容易通过核心转储来检索它。请注意,第二个选项已经可以完成,但默认情况下未启用。

c c++ coredump crash-dumps bitcoin

7
推荐指数
1
解决办法
129
查看次数