主页 > imtoken钱包下载安卓官网 > 比特币账户地址
比特币账户地址
比特币账户地址第 1 部分
1.修改pad,将公钥传给EVP。
2. size_tsize=EC_POINT_point2buf(group, publickey, POINT_CONVERSION_UNCOMPRESSED, buf, bn_ctx);。
3. ENGINE*engine;/*如果'digest'是功能引用。
4. EVP_DigestUpdate(evp_md_ctx, (*buf)+1, size-1);.
5. // 和 128 位对抗碰撞攻击。
6. 结构EVP_MD_CTX_t{。
7.} KECCAK1600_CTX;.
8. constEVP_MD*evp_md=EVP_sha3_256();。
9、无符号字符本;。
10. EVP_DigestInit(evp_md_ctx, evp_md);。
比特币账户地址第2部分
1、需要注意的是POINT_CONVERSION_UNCOMPRESSED生成的buf第一个字节是曲线类型,后面是XY坐标。 所以需要排除曲线型!
2. *引擎提供*/。
3. //填充的第一个位。 请参阅状态结构中的注释。
4. //改变thesha3pad0x06tokeccakpad0x01。
5. //New256createsanewSHA3-256hash..
6. uint64_tA[5][5];。
7. //permute 会被调用来清空它。 dsbyte 也包含了。
8.然后初始化EVP相关。 constEC_GROUP*group=EC_GROUP_new_by_curve_name(NID_secp256k1);。
9. unsignedcharbuf[1600/8-32];。
10. unsigned long flags;.
比特币账户地址第 3 部分
1. //atleastonebyteofspaceind.bufbecause, ifitwerefull,.
2. KECCAK1600_CTX*ctx=evp_ctx->md_data;。
3. unsignedint*len=newunsigned[10];。
4.EVP_PKEY_CTX*pctx;。
5. EC_POINT*publickey=EC_POINT_new(组);。
6. BN_CTX*bn_ctx=BN_CTX_new();.
7. int(*update)(EVP_MD_CTX*ctx, constvoid*data, size_tcount);。
8. EVP_DigestFinal(evp_md_ctx,结果,。
9. EC_POINT_mul(group, publickey, privatekey, nullptr, nullptr, bn_ctx);。
10. KECCAK1600_CTX*keccak256=reinterpret_cast((reinterpret_cast(evp_md_ctx))->md_data);。
比特币账户地址第 4 部分
1. BIGNUM*n=BN_new();.
2. size_tnum;/*usedbytesinbelowbuffer*/.
3. 接下来,更换垫子。 由于在OpenSSL的头文件中并没有定义我们需要修改的结构体,所以我们需要从源码中找到,复制到这里。
4. constEVP_MD*摘要;。
5、查看OpenSSL的SHA3实现,可以发现它的pad其实是存放在KECCAK1600_CTX中的,KECCAK1600_CTX在sha3初始化的时候存放在EVP_MD_CTX中。 因此,使用OpenSSL实现Keccak256需要一些手段来改变SHA3256的pad。 并生成公钥和私钥。
6. 简单的说,它生成的Hash会有32个字节。
7. keccak256->pad=0x01;。
8. 区块链是一种基于密码学的技术。 以太坊账户的规则和其他规则都是使用EC系统来执行的。 以太坊使用的EC是著名的secp256k1曲线。 本质上,以太坊账户其实就是一个ECDSA私钥,因为如果你有一定的私钥就可以用私钥对交易进行签名。 可以说你已经完全掌握了这笔账。 EC私钥是一个范围内的随机数。 对于 secp256k1 曲线,最大值为 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141。 EC的公钥是椭圆曲线上私钥对应的点。 公钥和私钥之间的关系很简单,就是Publickey=Privatekey*G,其中G是椭圆曲线的基点。 这里的*不是传统意义上的乘法。 具体可以参考椭圆曲线椭圆域的相关知识。 好在OpenSSL库提供了完整的椭圆曲线相关的计算,所以我们不需要关注椭圆曲线的具体实现细节!
9. BN_rand_range(privatekey, n);。
10. funcNewKeccak256() 散列。 哈希{return&state{rate: 136, outputLen: 32, dsbyte: 0x01}}。
比特币账户地址第 5 部分
1. size_tblock_size;/*cachedctx->digest->block_size*/.
2. size_tmd_size;/*outputlength, variableinXOF*/.
3.};. 最后你可以得到结果。 {.
4. unsignedcharbuf[KECCAK1600_WIDTH/8-32];。
5. /*更新函数:通常从EVP_MD复制过来*/。
6. }/*EVP_MD_CTX*/;.
7. funcNew256() 散列。 哈希{return&state{rate: 136, outputLen: 32, dsbyte: 0x06}}。
8. EVP_MD_CTX*evp_md_ctx=EVP_MD_CTX_new();。
9、从以太坊的源码可以看出,Keccak算法在2015年成为了SHA3标准算法,但是以太坊使用的Keccak256并不等于SHA3256。 当它成为 SHA3 算法时,NIST 仍然对 Keccak 进行了更改。 标准的 SHA3 算法实际上在以太坊中实现了,但没有被使用!
10.用到了,看评论发现这个dsbyte是pad!
比特币账户地址第 6 部分
1、在最新的OpenSSL version 1中,没有非标准的Keccak256,只有SHA3256。
2. 类型定义{.
3. d.buf=append(d.buf, dsbyte)。
4. unsignedchar**buf=(unsignedchar**) malloc(8);。
5. unsignedchar*result=(unsignedchar*)malloc(32);。
6、可以看出两种算法只相差一个dsbyte,这个dsbyte就在这里。
7. void*md_data;。 staticinit(EVP_MD_CTX *evp_ctx比特币账户能查到吗,无符号字符键盘)。
8. //它的通用安全性增强了这 256 位对预像攻击的抵抗力,。
9. /*用于签名/验证的公钥上下文*/。
10. EC_GROUP_get_order(group, n, bn_ctx);。
币圈新闻,版权所有丨如未注明比特币账户能查到吗,均为原创丨本站受BY-NC-SA协议授权