当前位置: 首页 > article >正文

golang 实现比特币内核:数字签名的编码算法

对于签名,我们不能使用SEC进行编码,因为r和s之间没有密切的关系,你知道其中一个,但不能推导出另一个。我们可以使用一种称为DER(Distinguished Encoding Rules)的方案来编码签名。以下是签名编码的步骤:

将第一个字节设置为0x30

第二个字节为签名的长度(通常是0x44或0x45)

第三个字节设置为0x02,这是一个标记,表明接下来的字节是用于r的。

将r转换为字节数组,如果r的第一个字节大于或等于0x80,则在字节数组的开头添加一个字节0x00,计算字节数组的长度,将长度值附加在步骤3中的标记字节0x02之后,并在长度值后附加字节数组。

在步骤4的字节数组末尾添加一个标记字节0x02。

按照步骤4中的方式添加s。

我们需要对r和s的长度进行编码,因为r和s最多可以有32个字节,但有时它们的长度可能会比这短。让我们看一个r和s的编码示例:

30 45 02 21 00 ed81ff192e75a3fd2304004dcadb746fa5e24c5031ccfcf21320b0277457c98f 02 20 7a986d955c6e0cb35d446a89d3f56100f4d7f67801c31967743a9c8e10615bed

第一个字节是0x30,如上所述,第二个字节是0x45,即r和s的总长度。第三个字节是标记0x02


http://www.kler.cn/a/391326.html

相关文章:

  • windows C++ TCP客户端
  • [C/C++]智能指针是什么?实现原理是什么?
  • 决策树(理论知识3)
  • 什么是根服务器?有什么作用?
  • GamePlay UE网络同步
  • 瑞吉外卖项目学习笔记(七)新增菜品、(批量)删除菜品
  • ctfshow(319->326)--XSS漏洞--反射型XSS
  • Xcode 16 使用 pod 命令报错解决方案
  • VMware Fusion和centos 8的安装
  • 【MySQL】关于MySQL启动后mysqld_safe和mysqld进程
  • Python酷库之旅-第三方库Pandas(208)
  • 【LinuxC编程】06 - 守护进程,线程
  • 基于深度学习的猫狗识别
  • 力扣102:二叉树的层次遍历
  • OpenEuler 下 Docker 安装、配置与测试实例
  • [数组二分查找] 0153. 寻找旋转排序数组中最小值
  • Vite初始化Vue3+Typescrpt项目
  • C#自定义特性-SQL
  • 如何在 Ubuntu 上 部署 OceanBase
  • CosyVoice文本转语音:轻松创造个性化音频
  • 【LeetCode每日一题】——LCR 106.判断二分图
  • 自动化爬虫DrissionPage
  • golang 实现bitcoin core: bitcoin 椭圆曲线的“生成元”设置
  • 计算机网络:运输层 —— TCP/IP运输层中的两个重要协议
  • 基于Ubuntu2410脚本搭建OpenStack-D版
  • SSE与WebSocket与MQTT