secp256k1如何使用
https://npm.taobao.org/package/secp256k1
这个即椭圆曲线加密算法算法,随机生成一个私钥然后通过椭圆曲线加密算法算法(ECC)得到一个公钥,且无法反向
然后再使用椭圆曲线签名算法(ECDSA)和私钥结合进行签名
Secp256k1是指比特币中使用的ECDSA(椭圆曲线数字签名算法)曲线的参数,并且在高效密码学标准(Certicom Research,http://www.secg.org/sec2-v2.pdf)中进行了定义。
Secp256k1为基于Fp有限域上的椭圆曲线,由于其特殊构造的特殊性,其优化后的实现比其他曲线性能上可以特高30%,有明显以下两个优点:
1)占用很少的带宽和存储资源,密钥的长度很短。
2)让所有的用户都可以使用同样的操作完成域运算。
即为一类比较安全的椭圆曲线
以太坊账户
要创建以太坊账户,只需要一个非对称加密密钥对——由不同的算法(例如RSA、ECC等)生成。以太坊使用椭圆曲线加密算法(ECC),ECC有多个参数用来调节速度和安全性,以太坊使用 secp256k1参数。
每个账户用一个地址表示。有了密钥之后,就需要生成地址。
从公钥生成地址的过程如下:
(1)生成公钥的keccak-256哈希。它将给出一个256位的数字。
(2)丢弃前面的96位,即12字节。现在得到160位二进制数据,即20字节。
(3)把地址编译成十六进制的字符串。最后将得到一个40字符的字
节串,就是账户地址。
交易
交易是一个签名数据包,用于从一个账户向另一个账户或者向一个合约转以太币、调用合约方法或者部署一个新合约。
交易使用椭圆曲线数字签名算法(ECDSA)签名,ECDSA是一种基于ECC的数字签名算法。
交易包含:
- 信息接收者
- 识别发起人及其意愿的签名
- 要转账的以太币数量
- 交易执行允许进行的计算资源最大值(叫作gas上限)
- 交易发起人愿意为单位计算资源支付的费用(叫作gas价格)
如果交易目的是调用合约方法,则还包含输入数据。
如果其目的是部署合约,则可以包含初始化代码。 用交易所消耗的gas乘以gas价格计算得到交易费
安装:
npm install secp256k1 --save
使用:
const { randomBytes } = require('crypto');
const secp256k1 = require('secp256k1');
// or require('secp256k1/elliptic')
// if you want to use pure js implementation in node
// generate message to sign
const msg = randomBytes();//随机生成一个数据
console.log(msg);
// generate privKey
let privKey
do {
privKey = randomBytes();//随机生成一个私钥
console.log(privKey);
} while (!secp256k1.privateKeyVerify(privKey));
// get the public key in a compressed format
const pubKey = secp256k1.publicKeyCreate(privKey);//根据私钥生成公钥
console.log(pubKey);
// sign the message
const sigObj = secp256k1.sign(msg, privKey);//然后进行签名
console.log(sigObj);
// verify the signature
console.log(secp256k1.verify(msg, sigObj.signature, pubKey));//核查签名是否正确
// => true
返回:
<Buffer 4a ae 6a 5b 7a 4a 8b 9e c0 aa 3c f9 a4 f3 1f bb>
<Buffer a0 4b 2b 2f b8 ee d3 d3 8f ea 6c fd 5a 1a c0 a2 c2 0c 3a e6 bf c1 >
<Buffer d1 f9 d6 7b b8 6e 6e 4e c9 e6 6c c5 0b ca 5e 3c cb 1a e4 0c >
{ signature:
<Buffer f9 f3 ff 0c a7 ea 4c 8d ed a1 2e 9a d4 cc b0 a6 e9 7f d6 dc 5a 4a 6b 6a 1b b6 e1 8a 7e ... >,
recovery: }
true
secp256k1如何使用的更多相关文章
- 以太坊的crypto模块--以太坊源码学习
以太坊的crypto模块 该模块分为两个部分一个是实现sha3,一个是实现secp256k1(这也是比特币中使用的签名算法). 需要说明的是secp256k1有两种实现方式,一种是依赖libsecp2 ...
- nodeJS之crypto加密
前面的话 加密模块提供了 HTTP 或 HTTPS 连接过程中封装安全凭证的方法.也提供了 OpenSSL 的哈希,hmac, 加密(cipher), 解密(decipher), 签名(sign) 和 ...
- ECC椭圆曲线详解(有具体实例)
前言 ECC英文全称"Ellipse Curve Cryptography" 与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥 ECC164位 ...
- 以太坊go-ethereum签名部分源码解析
以太坊go-ethereum签名部分源码解析 golang标准库里的crypto/ecdsa椭圆曲线加密算法所提供的函数有: ecdsa.PublicKey结构体通过持有一个elliptic,Curv ...
- 以太坊挖矿源码:clique算法
上文我们总结了以太坊最主要的共识算法:ethash算法,本文将重点分析以太坊的另一个共识算法:clique. 关键字:clique,共识算法,puppeth,以太坊地址原理,区块校验,认证结点,POA ...
- 是否可能两个ETH私钥对应同一个地址
原提问在这里. 笔者在使用到neon-js中的私钥生成方法时发现其使用了getRandomValues方法来生成64字符长度的私钥,进而考虑到其随机性,若是调用足够多次,依然有可能生成两个完全一样的私 ...
- Node.js 加密
稳定性: 2 - 不稳定; 正在讨论未来版本的 API 改进,会尽量减少重大变化.详见后文. 使用 require('crypto') 来访问这个模块. 加密模块提供了 HTTP 或 HTTPS 连接 ...
- [区块链] 密码学——椭圆曲线密码算法(ECC)
今天在学椭圆曲线密码(Elliptic Curve Cryptography,ECC)算法,自己手里缺少介绍该算法的专业书籍,故在网上查了很多博文与书籍,但是大多数博客写的真的是...你懂的...真不 ...
- The Ethereum devp2p and discv4 protocol Part II
描述 本文章主上下两篇 上篇:讲述以太坊devp2p与disc4节点发现协议 下篇:实践篇,实现如何获取以太坊所有节点信息(ip,port,nodeId,client) 正文 本片为下篇:实践篇,主要 ...
随机推荐
- 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计
配置的热更新 什么是热更新:这个词听着有点熟悉,但到底是什么呢? 一般来说:创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOpti ...
- 设置实体类型中String类型的属性值为String.Empty
/// <summary> /// 将String类型的属性值设置为String.Empty /// </summary> /// <typeparam name=&qu ...
- Moco服务器jar包实现简易的API搭建
永远不要停止前进的脚步,就像你不会忘记以前那些窘迫的连一无所有都称不上的裸露的记忆一样.追求永远的打怪升级,武装自己.双手的努力让曾经那些不堪的记忆在时间的长河中渐渐风化隐匿,但请不要忘记它留下的那一 ...
- 在使用vue-cli中遇到的几个问题
前言:框架没有好坏之分,能解决需求就可以.之前没事用vue模仿过BOSS直聘App(纯属娱乐),实际工作中开发过一个后台管理系统,遇到过不少坑,终于闲下来稍微总结几个问题分享一下! 一.所遇到的问题( ...
- SSM实现简单后台分页
1.简单思路 这是最常见的分页格式,分析一下我们需要传什么数据给前端吧! 首先是左边下面的总共几条记录,然后是右边的当前页面,然后就是一些你所需要展示的数据.对了每页显示多少条是不也得控制下,下面的显 ...
- JAVA的高并发基础认知 二
一.JAVA高级并发 1.5JDK之后引入高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发 ...
- Wepy在VScode中的高亮显示
小程序的wepy框架会生成后缀名为.wpy的文件,此文件用VScode打开时并不是高亮的,官方文档给我们提供了两种方案进行高亮 方案一: 1. 在 Code 里先安装 Vue 的语法高亮插件 Ve ...
- Power BI 与 Azure Analysis Services 的数据关联:1、建立 Azure Analysis Services服务
Power BI 与 Azure Analysis Services 的数据关联:1.建立 Azure Analysis Services服务
- python自动化开发-6-面向对象编程
面向对象编程 面向对象的特性 封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 继承:面向对象编程 (OOP) 语言的一个主要功能就是“ ...
- Java并发编程(十二)Callable、Future和FutureTask
一.Callable与Runnable 先说一下java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法: public interface Runnable { pu ...