我正在使用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) 我目前正在尝试从压缩的公钥中派生出比特币未压缩的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) 我想分叉namecoin/namecoin,但我已经分叉比特币/比特币.后者是前者的上游父母.叉链是:
比特币/比特币 - > vinced/namecoin - > namecoin/namecoin
当我分叉namecoin/namecoin时,Github只是将我重定向到我的myuserid/bitcoin fork,而不是创建一个新的myuserid/namecoin fork.在Github看来,他们是同一个项目,但事实并非如此.
有人知道怎么做吗?
我有这个代码:
#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) 我正在使用这个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中创建它?
我在使用 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 的数据)
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) 通过使用在线工具和维基百科我发现每个sha-256加密字符串是包含数字和字符的64个字符长.因此我假设有34 ^ 36个组合(2 ^ 216由代数计算器简化).经过一些研究后我发现大多数人说有2 ^ 256种组合.有人能解释一下吗 为了使上下文清晰,我写了一篇关于加密货币的论文,并尝试解释有多少不同的加密组合以及可以花多长时间(因此可以进行多少次猜测)并将其与总的原子数进行比较.宇宙(大约10 ^ 85).
我正在尝试根据 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 将种子转换为私钥/公钥及其各自地址的示例吗?
我知道操作系统有时会在发送信号时(通常在崩溃时)生成核心转储。有没有办法通过#define 或编译器标志从C/C++内部告诉操作系统不可以,或者可以通过该可执行文件生成某种特定限制的核心转储?我知道控制它的唯一方法是通过 ulimit -c。我的测试系统是Linux。无核心转储不需要在系统范围内实现,仅适用于特定程序。
对于感兴趣的人来说,这与Bitcoin Core 的 bitcoin-qt 中的CVE-2019-15947 有关,它仍然没有解决方案。
部分讨论位于比特币 GitHub 错误跟踪页面。
另一种选择是对内存中的 wallet.dat 进行混淆和/或加密,这样就不容易通过核心转储来检索它。请注意,第二个选项已经可以完成,但默认情况下未启用。
bitcoin ×10
c ×3
c++ ×2
openssl ×2
python ×2
blockchain ×1
c# ×1
coinbase-api ×1
coredump ×1
crash-dumps ×1
cryptography ×1
ecdsa ×1
github ×1
hash ×1
heap ×1
node.js ×1
public-key ×1
security ×1
sha256 ×1
web-services ×1