go区块链培训怎么样?深度讲解椭圆曲线加密算法ECC和椭圆曲线数字签名算法ECDSA
区块链培训怎么样?关键还是看其课程质量,下面是我写的一系列课程讲解,大家可以先学习一下!感兴趣的还可以找我要视频哈!
8.1.1 ECC数字签名(ECDSA)核心代码
下面通过一个案例验证数字签名,如例所示。
例1-1 ECDSA
1 package main
2 import (
3 "crypto/ecdsa"
4 "crypto/elliptic"
5 "crypto/rand"
6 "crypto/sha256"
7 "encoding/hex"
8 "fmt"
9 "log"
10 "math/big"
11 )
12 func main() {
13 fmt.Println("生成签名-------------------------------")
14 privKey, pubKey := NewKeyPair()
15 msg := sha256.Sum256([]byte("hello world"))
16 r, s, _ := ecdsa.Sign(rand.Reader, &privKey, msg[:])
17 strSigR := fmt.Sprintf("%x", r)
18 strSigS := fmt.Sprintf("%x", s)
19 fmt.Println("r、s的10进制分别为:", r, s)
20 fmt.Println("r、s的16进制分别为:", strSigR, strSigS)
21 signatureDer := MakeSignatureDerString(strSigR, strSigS)
22 fmt.Println("数字签名DER格式为:", signatureDer)
23 res := VerifySig(pubKey, msg[:], r, s)
24 fmt.Println("签名验证结果:", res)
25 res = VerifySignature(pubKey, msg[:], strSigR, strSigS)
26 fmt.Println("签名验证结果:", res)
27 }
28 func NewKeyPair() (ecdsa.PrivateKey, []byte) {
29 curve := elliptic.P256()
30 private, err := ecdsa.GenerateKey(curve, rand.Reader)
31 if err != nil {
32 log.Panic(err)
33 }
34 pubKey := append(private.X.Bytes(), private.Y.Bytes()...)
35 return *private, pubKey
36 }
37 func MakeSignatureDerString(r, s string) string {
38 lenSigR := len(r) / 2
39 lenSigS := len(s) / 2
40 lenSequence := lenSigR + lenSigS + 4
41 strLenSigR := DecimalToHex(int64(lenSigR))
42 strLenSigS := DecimalToHex(int64(lenSigS))
43 strLenSequence := DecimalToHex(int64(lenSequence))
44 derString := "30" + strLenSequence
45 derString = derString + "02" + strLenSigR + r
46 derString = derString + "02" + strLenSigS + s
47 derString = derString + "01"
48 return derString
49 }
50 func VerifySig(pubKey, message []byte, r, s *big.Int) bool {
51 curve := elliptic.P256()
52 keyLen := len(pubKey)
53 x := big.Int{}
54 y := big.Int{}
55 x.SetBytes(pubKey[:(keyLen / 2)])
56 y.SetBytes(pubKey[(keyLen / 2):])
57 rawPubKey := ecdsa.PublicKey{curve, &x, &y}
58 res := ecdsa.Verify(&rawPubKey, message, r, s)
59 return res
60 }
61 func VerifySignature(pubKey, message []byte, r, s string) bool {
62 curve := elliptic.P256()
63 keyLen := len(pubKey)
64 x := big.Int{}
65 y := big.Int{}
66 x.SetBytes(pubKey[:(keyLen / 2)])
67 y.SetBytes(pubKey[(keyLen / 2):])
68 rawPubKey := ecdsa.PublicKey{curve, &x, &y}
69 rint := big.Int{}
70 sint := big.Int{}
71 rByte, _ := hex.DecodeString(r)
72 sByte, _ := hex.DecodeString(s)
73 rint.SetBytes(rByte)
74 sint.SetBytes(sByte)
75 res := ecdsa.Verify(&rawPubKey, message, &rint, &sint)
76 return res
77 }
78 func DecimalToHex(n int64) string {
79 if n < 0 {
80 log.Println("Decimal to hexadecimal error: the argument must be greater than zero.")
81 return ""
82 }
83 if n == 0 {
84 return "0"
85 }
86 hex := map[int64]int64{10: 65, 11: 66, 12: 67, 13: 68, 14: 69, 15: 70}
87 s := ""
88 for q := n; q > 0; q = q / 16 {
89 m := q % 16
90 if m > 9 && m < 16 {
91 m = hex[m]
92 s = fmt.Sprintf("%v%v", string(m), s)
93 continue
94 }
95 s = fmt.Sprintf("%v%v", m, s)
96 }
97 return s
98 }
运行结果如图所示。由于数字签名字段过长,这里只截取了一部分。
图8.1 运行结果
go区块链培训怎么样?深度讲解椭圆曲线加密算法ECC和椭圆曲线数字签名算法ECDSA相关推荐
- 三万块钱6天的区块链培训,我学会了搭建区块链系统框架?
"七月在野,八月在宇,九月在户,十月都在裁员,区块链行业永远在招人"形象地表现出区块链行业目前的人员流动大,需求也大.根据某招聘网站显示,区块链行业薪资在2-5万,最高能达到10万 ...
- **区块链培训步入标准化阶段,比特大学开启系统性学习课程**
区块链技术是当下信息技术产业最前沿的技术之一,也是继大数据技术后最受各界关注的领域,我国已将区块链技术作为战略性前沿技术列入<"十三五"国家信息化规划>,明确提出&qu ...
- 区块链从入门到精通 - 区块链培训
区块链从入门到精通 - 区块链培训 关于本号 不得不说,你够机灵,一路追过来,你也算是很幸运或者说咱俩有缘分了!到了这里,就算到家了!不扯犊子了, 以后有的是机会唠,说正事! 区块链技术人才告急,百万 ...
- 文储研习社第20期 | 关于对区块链培训的一些思考
你好,我是Bingo. 身在科技行业,我们可以随口说出许多岗位,比如可以划分为:技术/研发类.产品类.设计类.运营类.市场类.战略/投资类.职能及其他类.每个分类就可以衍生出无数岗位,培训机构可以细化 ...
- 区块链培训就业方向多不多?
区块链培训就业方向多不多?学完黑马程序员的区块链课程后可以胜任 Golang web工程师.Golang服务器开 发工程师.区块链应用开发工程师.区块链公链开发工程师.区块链后台开发工程 师.区块链研 ...
- 学区块链技术,到底学什么?区块链培训机构or自学?
区块链在中国逐渐火热起来,区块链的培训机构也多起来.在Java一片红海的时候,好多人就开始把目光投向区块链技术学习.很多人想去参加区块链培训但是又很迷茫,参加区块链培训机构的学习还是自学呢,自学又学什 ...
- 区块链学习到底学什么?需要去区块链培训机构吗?
赛联区块链教育通过近几年的区块链培训经验,给大家整理出一些干货,提供区块链学习者. 区块链在中国逐渐火热起来,但是产业发展还处于起步期,不过产业对人的需求却与日俱增.在Java一片红海的时候,好多人就 ...
- 区块链三加一 “成才”路上提个醒:区块链培训机构鱼龙混杂
人和钱的聚集,是区块链风口正盛的最好反映.据<每日经济新闻>记者统计,仅从3月1日到3月9日,就有7家区块链媒体获得融资. "财经主编5名.新闻编辑20名.媒介专员5名.社区运营 ...
- 哪里有区块链培训机构?
哪里有区块链培训机构?怎么选?区块链培训学校主要集中在北京和上海,目前区块链培训机构有很多,线下有黑马程序员,线上有传智播客博学谷,均开设区块链培训课程,近年来对于区块链人才需求增长非常快,区块链人才 ...
最新文章
- vue key重复_得心应用的Vue高级技巧
- 数组array的一些用法
- python中if语句and和or用法_python中if语句的使用(比较、逻辑、成员、运算符,语句结构)...
- 嵌入式linux系统中设备驱动程序
- 408最后计算机网络题库,2021考研计算机统考408专业基础综合题库
- 今天讲讲hibernate的简单使用
- 再见!阿里云首席科学家闵万里离职:创办风投基金
- android emmc生产日期,碎碎念android eMMC【转】
- 大数据时代的回收生意经(淼一专访)
- 操作系统课程设计报告(文件系统)
- ic卡c语言程序,sle4442程序(ic卡程序,C语 - 控制/MCU - 电子发烧友网
- javascript的数组和数组元素的遍历,实现全国省份和城市一览表
- css3图片放大缩小过度动画
- html蒙版代码是什么意思,图层蒙版是什么意思
- java 显示百分比_Java 数字转百分比%
- mac 10.13.6 升级至10.14.6再升级至12.4
- Win10中如何把语言栏缩到系统托盘
- 不会用修图工具没关系,Excel也能轻松更换照片底色
- 贵州邮政:IMO班聊让内部沟通信息跳涨10万+
- 优词词根词典mdx_成都seo网店优化24小时在线,关键词优化步骤
热门文章
- 联合办公空间该如何继续发展?
- 计算机四级证书难考吗 考试内容是什么?
- visio模板#科研绘图#visio#技术路线图#文献汇报思路
- 【C#】无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe)
- 任天堂媒体峰会召开,众多新作现场试玩
- 用R语言进行数据探索
- an integer is required (got type tuple) 报错解决
- ACPI AML debug and override ACPI tables using initrd
- 线性筛法求素数c语言,[算法]素数筛法(埃氏筛法线性筛法)
- HTML期末大作业: 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代做