从零入门区块链和比特币(第三期)

news/2024/5/14 4:35:23

欢迎来到我的区块链与比特币入门指南!如果你对区块链和比特币感兴趣,但不知道从何开始,那么你来对地方了。本博客将为你提供一个简明扼要的介绍,帮助你了解这个领域的基础知识,并引导你进一步探索这个激动人心的领域。

感兴趣的话可以看看第一期👉从零入门区块链和比特币(第一期)👈

                                 第二期👉从零入门区块链和比特币(第二期)👈

目录

密码学知识简介

为什么传统加密解密不安全

非对称加密简介

如何生成交易账号

交易解读

比特币没有余额

UXTO = Unspent Transaction Output

交易输入

交易输出

案例: Alice发送1 btc给Bob,签名和公钥是Alic的,交易必须验证Alic能不能使用自己上笔交易获得的收入。

更多支付方式


密码学知识简介

为什么传统加密解密不安全

传统加密使用同一个密码加密解密,一旦密码泄漏就毫无安全性。 即使密码安全,但是利用统计学原理,配合计算机暴力计算,依然可以轻松破解。 密码每天变就安全了吗?每个字变密码都没用,恩尼格码表示我想静静。

非对称加密简介

加密解密使用不同的秘钥,加密的密码无法用来解密,必须成对使用。

通讯双方A/B分别生成自己的公钥/私钥对,把公钥发送给对方。A发送信息时使用B的公钥加密,并使用自己的私钥签名。

B收到消息后,用A的公钥检查签名是否是A发出,确认成功后,用私钥解密查看信息。

B用A的公钥加密信息,并用自己的私钥签名。

最大缺点是速度慢,效率大大低于常规的对称加密。 一些技巧

如何生成交易账号

  1. 生成256位(64字节)私钥: 这个私钥是通过随机数生成器生成的,通常以十六进制表示。

  2. 非对称算法生成公钥: 通过私钥,使用非对称算法(如椭圆曲线加密算法)可以生成对应的公钥。

  3. 计算公钥的SHA-256: 对公钥进行 SHA-256 哈希计算,得到一个长度为 32 字节的哈希值。

  4. 计算ripemd-160: 将第 3 步的 SHA-256 哈希结果再进行 RIPEMD-160 哈希计算,得到一个长度为 20 字节的哈希值。

  5. 在头上加上地址版本: 在第 4 步的结果前面添加一个字节,用于表示地址的版本信息。比特币主网的地址版本通常为 0x00

  6. 计算SHA-256: 对第 5 步的结果进行两次 SHA-256 哈希计算。

  7. 取第6步的前4个字节,也就是8个16进制个位数,也就是字符串前8位: 从第 6 步得到的结果中取出前四个字节,通常以十六进制表示。

  8. 把第7步的4个字节内容添加到第5步结果后面作为校验: 将第 7 步得到的四个字节追加到第 5 步的结果后面。

  9. 对第8步的结果做base58编码,得到最终地址: 将第 8 步的结果进行 Base58 编码,得到最终的比特币地址。

这个过程中,私钥和公钥用于数字签名和验证,而最终的比特币地址用于接收和发送比特币。

交易解读

比特币没有余额

UXTO = Unspent Transaction Output

先了解一下流水账

         交易1: 系统发工资50元给A

        交易2(使用交易1获得的50元)

                        向B买包烟话费30元

                        给自己找零发20元

        交易3(使用交易2获得的20元)

                         叫外卖向C支付5元

                         给自己找零15元

        A的账户余额由多少?

著名的10,000个BTC买披萨的交易: 

交易输入

         上一笔交易输出的hash,钱从哪里来。

         scriptSig: 用来解锁上一笔交易的scriptPubKey用于这次交易的消费

交易输出

        金额,单位(聪)

         scriptPubKey:等下一笔教育的scriptSig来解锁

案例: Alice发送1 btc给Bob,签名和公钥是Alic的,交易必须验证Alic能不能使用自己上笔交易获得的收入。

        输出T1(钱从哪里来): TX1输出的scriptPubKey:OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

         输入T2(把T1的钱花掉): scriptSig:<签名> <公钥>

逐步执行验证脚本,合法花掉UXTO:

         实际验证脚本: <签名> <公钥> OP_DUP OP_HASH160 <pubKeyHash>         OP_EQUALVERIFY OP_CHECKSIG 常数入栈,栈内容:<签名> <公钥>

        OP_DUP复制栈顶元素,栈内容:<签名> <公钥> <公钥>

        OP_HASH160对栈顶元素计算Hash,栈内容:<签名> <公钥> <公钥哈希> 常数入栈,栈内容:<签名> <公钥> <公钥哈希> <pubKeyHash>

        OP_EQUALVERIFY OP_CHECKSIG检查栈顶元素是否相等,相等的话再比较签名。

更多支付方式

        支付到公钥(早期做法) scriptPubKey:<公钥> OP_CHECKSIG scriptSig:<签名>

        支付给任何人 scriptPubKey:<空> scriptSig:OP_TRUE

        永久销毁 scriptPubKey:OP_RETURN 直接返回,没法消费了。 签名消费(要求提供一段数据,hash后与<hash>相等。) scriptPubKey:OP_HASH256 <hash> OP_EQUAL scriptSig:<data>

结语:看我这么努力的份上,麻烦点赞收藏加关注,有问题在评论区call爆我,我一定会改的。谢谢!


http://www.mrgr.cn/p/57576010

相关文章

Ocelot系列文章01---简介

一、项目简介 Ocelot是一个用.NET Core实现并开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Consul集成。 1、请求转发地址配置 通过在json文件简单配置,就可以实现简易的网关,它可以接受所有客…

【11-决策树的奥秘:使用Scikit-learn构建和优化模型】

文章目录 前言决策树简介安装和导入必需的包选择数据集分割数据集构建决策树模型模型评估可视化决策树优化决策树结论前言 决策树是一种基本的机器学习方法,它模拟人类决策过程以分类数据或预测结果。在这篇博文中,我们将深入了解如何在Python的Scikit-learn库中构建和优化决…

编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 编写…

MBIST和BISR+循环移位和强制转换+verdi操作+vip需要disable auto recording+vim设置某行高亮+python模拟find命令

MBIST和BISR https://blog.csdn.net/liubin1222/article/details/103995449 https://zhuanlan.zhihu.com/p/161185302 进行内存修复需要两步:首先在可修复内存测试期间,由MBIST控制器诊断出的故障。第二步是修复内存,确认修复签名。可修复的存储器都有带修复签名的寄存器。 …

力扣-566. 重塑矩阵

1. 题目 题目地址(566. 重塑矩阵 - 力扣(LeetCode)) https://leetcode.cn/problems/reshape-the-matrix/ 题目描述 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。 给你一个由二维数组 ma…

细致讲解——不同类型LSA是作用以及相互之间的联系

目录 一.常见的LSA类型 二.OSPF特殊区域 1.区域类型 2.stub区域和totally stub区域 &#xff08;1&#xff09;stub区域 &#xff08;2&#xff09;totally stub区域 3.nssa区域和totally nssa区域 &#xff08;1&#xff09;nssa区域 &#xff08;2&#xff09;totall…

【Godot4.2】有序和无序列表函数库 - myList

概述 在打印输出或其他地方可能需要构建有序或无序列表。本质就是构造和维护一个纯文本数组。并用格式化文本形式&#xff0c;输出带序号或前缀字符的多行文本。 为此我专门设计了一个类myList&#xff0c;来完成这项任务。 代码 以下是myList类的完整代码&#xff1a; # …

《HelloGitHub》第 97 期

这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短时间内感受到开源的魅力,对编程产生兴趣!兴趣是最好的老师,HelloGitHub 让你对编程感兴趣!简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项…

Docker从无到有

主要为windows下docker的安装与使用~ 初始Docker Docker理解 对于docker的加简介&#xff0c;我们可以官网获取它的概念&#xff0c;接下来就从什么是docker、为什么要使用docker以及它的作用来进行一个快速入门 前提&#xff1a;项目在发布时&#xff0c;不仅需要其jar包同…

探索矿业数字化平台:实现智能化采矿与管理

随着信息技术的迅猛发展&#xff0c;矿业领域也在逐步实现数字化转型。数字化平台的出现为矿业企业带来了更高效、更智能的采矿与管理方式。本文将探讨矿业数字化平台的意义、特点以及未来发展方向。 ### 1. 数字化平台的意义 传统的矿业生产和管理方式存在诸多问题&#xff…

【学习笔记】基础算法:二次离线莫队/回滚莫队

5k_sync_closer【学习笔记】基础算法:二次离线莫队/回滚莫队 二次离线莫队前置知识:莫队前置知识:值域分块 值域分块,就是对 \(A\) 的值域进行分块,每个块维护该值域内数的个数众所周知,莫队的复杂度是 \(O(n \sqrt m)\) 的,而在维护一些问题时左右端点移动一格并不是 \…

微信小程序:8.WXSS

WXSS和CSS的关系 WXSS具有CSS大部分特性&#xff0c;同时&#xff0c;WXSS还对CSS进行扩充以及修改&#xff0c;适应微信小程序的开发。 与CSS相比&#xff0c;WXSS扩展的特性有&#xff1a; rpx尺寸单位imprt样式导入 rpx尺寸单位 rpx是微信小程序中独有的&#xff0c;用来…

Facebook的未知力量:数字世界的新引擎

在数字化的时代&#xff0c;社交媒体已经成为了我们日常生活中不可或缺的一部分&#xff0c;而Facebook作为其中的巨头&#xff0c;其影响力远远超出了我们的想象。但是&#xff0c;Facebook背后隐藏的力量和影响远不止于此&#xff0c;它正逐渐成为数字世界的新引擎&#xff0…

加密的艺术:密文的创建和校验

这是我们今天要探讨的数据加密技术。数据的保密是对数据加密、解密的统称,用学院派的说法就是,使用某种算法改变了信息原本的形态,使攻击者即使窃取了信息也因为没有对应的解密的方法也无法获取当信息的真实内容。概述 在我很喜欢的一部(根据真实事件改编)的电影《模仿游戏…

边缘计算在视频监控领域的应用

一、边缘计算在视频监控领域的应用 运用边缘计算解决视频监控问题&#xff0c;可以带来许多优势。以下是一些具体的应用示例&#xff1a; 实时分析与处理&#xff1a;在视频监控系统中&#xff0c;边缘计算盒子可以实时处理和分析视频流&#xff0c;实现对监控画面的智能识别…

微信小程序的常用API②

一、动画API &#xff08;1&#xff09;作用&#xff1a;用于在微信小程序中完成动画效果的制作 &#xff08;2&#xff09;使用&#xff1a;创建实例 wx.createAnimation() &#xff08;3&#xff09;常用属性&#xff1a; duration 【number型】 动画持续时间&…

Swift - Playground

文章目录 Swift - Playground1. 新建Playground2. View3. 图片4. ViewController5. Playground - 多Page6. 注释6.1 Playground的注释支持markup语法&#xff08;与markdown相似&#xff09;6.1.1 语法 Swift - Playground Playground可以快速预览代码效果&#xff0c;是学习语…

uniapp获取当前位置及检测授权状态

uniapp获取当前位置及检测授权定位权限 文章目录 uniapp获取当前位置及检测授权定位权限效果图创建js文件permission.jslocation.js 使用 效果图 Android设备 点击 “设置”&#xff0c;跳转应用信息&#xff0c;打开“权限即可”&#xff1b; 创建js文件 permission.js 新建…

一个库帮你轻松的创建漂亮的.NET控制台应用程序

前言 做过.NET控制台应用程序的同学应该都知道原生的.NET控制台应用程序输出的内容都比较的单调,假如要编写漂亮且美观的控制台输出内容或者样式可能需要花费不少的时间去编写代码和调试。今天大姚给大家分享一个.NET开源且免费的类库帮你轻松的创建漂亮、美观的.NET控制台应用…