区块链培训怎么样?关键还是看其课程质量,下面是我写的一系列课程讲解,大家可以先学习一下!感兴趣的还可以找我要视频哈!

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相关推荐

  1. 三万块钱6天的区块链培训,我学会了搭建区块链系统框架?

    "七月在野,八月在宇,九月在户,十月都在裁员,区块链行业永远在招人"形象地表现出区块链行业目前的人员流动大,需求也大.根据某招聘网站显示,区块链行业薪资在2-5万,最高能达到10万 ...

  2. **区块链培训步入标准化阶段,比特大学开启系统性学习课程**

    区块链技术是当下信息技术产业最前沿的技术之一,也是继大数据技术后最受各界关注的领域,我国已将区块链技术作为战略性前沿技术列入<"十三五"国家信息化规划>,明确提出&qu ...

  3. 区块链从入门到精通 - 区块链培训

    区块链从入门到精通 - 区块链培训 关于本号 不得不说,你够机灵,一路追过来,你也算是很幸运或者说咱俩有缘分了!到了这里,就算到家了!不扯犊子了, 以后有的是机会唠,说正事! 区块链技术人才告急,百万 ...

  4. 文储研习社第20期 | 关于对区块链培训的一些思考

    你好,我是Bingo. 身在科技行业,我们可以随口说出许多岗位,比如可以划分为:技术/研发类.产品类.设计类.运营类.市场类.战略/投资类.职能及其他类.每个分类就可以衍生出无数岗位,培训机构可以细化 ...

  5. 区块链培训就业方向多不多?

    区块链培训就业方向多不多?学完黑马程序员的区块链课程后可以胜任 Golang web工程师.Golang服务器开 发工程师.区块链应用开发工程师.区块链公链开发工程师.区块链后台开发工程 师.区块链研 ...

  6. 学区块链技术,到底学什么?区块链培训机构or自学?

    区块链在中国逐渐火热起来,区块链的培训机构也多起来.在Java一片红海的时候,好多人就开始把目光投向区块链技术学习.很多人想去参加区块链培训但是又很迷茫,参加区块链培训机构的学习还是自学呢,自学又学什 ...

  7. 区块链学习到底学什么?需要去区块链培训机构吗?

    赛联区块链教育通过近几年的区块链培训经验,给大家整理出一些干货,提供区块链学习者. 区块链在中国逐渐火热起来,但是产业发展还处于起步期,不过产业对人的需求却与日俱增.在Java一片红海的时候,好多人就 ...

  8. 区块链三加一 “成才”路上提个醒:区块链培训机构鱼龙混杂

    人和钱的聚集,是区块链风口正盛的最好反映.据<每日经济新闻>记者统计,仅从3月1日到3月9日,就有7家区块链媒体获得融资. "财经主编5名.新闻编辑20名.媒介专员5名.社区运营 ...

  9. 哪里有区块链培训机构?

    哪里有区块链培训机构?怎么选?区块链培训学校主要集中在北京和上海,目前区块链培训机构有很多,线下有黑马程序员,线上有传智播客博学谷,均开设区块链培训课程,近年来对于区块链人才需求增长非常快,区块链人才 ...

最新文章

  1. vue key重复_得心应用的Vue高级技巧
  2. 数组array的一些用法
  3. python中if语句and和or用法_python中if语句的使用(比较、逻辑、成员、运算符,语句结构)...
  4. 嵌入式linux系统中设备驱动程序
  5. 408最后计算机网络题库,2021考研计算机统考408专业基础综合题库
  6. 今天讲讲hibernate的简单使用
  7. 再见!阿里云首席科学家闵万里离职:创办风投基金
  8. android emmc生产日期,碎碎念android eMMC【转】
  9. 大数据时代的回收生意经(淼一专访)
  10. 操作系统课程设计报告(文件系统)
  11. ic卡c语言程序,sle4442程序(ic卡程序,C语 - 控制/MCU - 电子发烧友网
  12. javascript的数组和数组元素的遍历,实现全国省份和城市一览表
  13. css3图片放大缩小过度动画
  14. html蒙版代码是什么意思,图层蒙版是什么意思
  15. java 显示百分比_Java 数字转百分比%
  16. mac 10.13.6 升级至10.14.6再升级至12.4
  17. Win10中如何把语言栏缩到系统托盘
  18. 不会用修图工具没关系,Excel也能轻松更换照片底色
  19. 贵州邮政:IMO班聊让内部沟通信息跳涨10万+
  20. 优词词根词典mdx_成都seo网店优化24小时在线,关键词优化步骤

热门文章

  1. 联合办公空间该如何继续发展?
  2. 计算机四级证书难考吗 考试内容是什么?
  3. visio模板#科研绘图#visio#技术路线图#文献汇报思路
  4. 【C#】无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe)
  5. 任天堂媒体峰会召开,众多新作现场试玩
  6. 用R语言进行数据探索
  7. an integer is required (got type tuple) 报错解决
  8. ACPI AML debug and override ACPI tables using initrd
  9. 线性筛法求素数c语言,[算法]素数筛法(埃氏筛法线性筛法)
  10. HTML期末大作业: 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代做