## 区块链(Item_BlockChain)
**@author: lancer @time: 2022/7/6**
---
[TOC]
+ 区块链:是一个又一个区块组成的链条。每一个区块中保存了一定的信息,它们按照各自产生的时间顺序连接成链条。这个链条被保存在所有的服务器中,只要整个系统中有一台服务器可以工作,整条区块链就是安全的。相比于传统的网络,区块链具有两大核心特点:一是数据难以篡改、二是去中心化。基于这两个特点,区块链所记录的信息更加真实可靠,可以帮助解决人们互不信任的问题。
+ 本项目(项目仅供学习参考使用)使用c++编写代码模拟了区块链的运作过程,所使用的外部库有``SHA256``、``Openssl``、``Boost``。
+ 项目链接:https://github.com/lancerstadium/Item_BlockChain
+ 介绍视频:https://www.bilibili.com/video/BV1ST411u7Jz/?vd_source=a46aee5caa4e010c950debd43a109188
---
### 0 参考目录
+ 区块链架构:https://github.com/teaandcode/TestChain
+ SHA256散列技术:http://www.zedwood.com/article/cpp-sha256-function
+ openssl库官网:https://www.openssl.org/source/
+ openssl下载器:http://slproweb.com/products/Win32OpenSSL.html
+ boost库官网:https://www.boost.org/users/download/
---
### 1 项目目录
```
Item_BlockChain
|----attachment // 存储.md链接的图片
|----env
| |----boost_1_79_0.zip // boost库安装包
| |----Win32OpenSSL-1_1_1p.msi // openssl下载器
|
|----source
| |----Block.cpp // Block类实现函数
| |----Block.h // Block类头文件
| | ...
| |----main.app // 主函数
| | ...
|
|----README.md // 本文档:项目说明文档
```
---
### 2 环境准备
#### 2.1 下载安装Visual Studio (2019)
+ 下载(略)
+ 新建C++空项目;
+ 将Item_BlockChain/source/下的文件全部复制到项目文件夹;
+ 在VS->右键头文件->添加->现有项,导入除main.cpp以外的所有文件;
+ 同理,右键源文件导入main.cpp.
#### 2.2 安装Openssl库
+ 文件已经下载好,点击Item_BlockChain/env/Win32OpenSSL-1_1_1p.msi安装即可,完成后有如下文件结构:
![](./attachment/Clipboard_2022-07-06-12-54-17.png)
+ 复制头文件路径1:[自己的路径]\openssl_win32\include
+ 复制依赖路径2:[自己的路径]\OpenSSL-Win32\lib\VC
+ 在VS->右键项目名->属性->VC++目录->常规,[包含目录]后面粘贴路径1,[库目录]后面粘贴路径2;
+ 在VS->右键项目名->属性->链接器->输入->附加依赖项后面加上如下字串:libcrypto32MD.lib;libcrypto32MDd.lib;libcrypto32MT.lib;libcrypto32MTd.lib;libssl32MD.lib;libssl32MDd.lib;libssl32MT.lib;libssl32MTd.lib;
+ 确认修改,完成安装;
+ 如有需要重新下载(一般不需要),请用openssl下载器下载Win32 Openssl v1.1.1p如图:
![](./attachment/Clipboard_2022-07-06-12-35-07.png)
+ 后续请查看教程:https://www.cnblogs.com/zwh0910/p/15885865.html
#### 2.3 安装Boost库
+ 去官网下载:boost_1_79_0.zip
+ boost库安装教程:https://blog.csdn.net/weixin_39766005/article/details/120305393
+ 注:如果编译期间有什么问题可查看本文最后一小节,如果没能帮助到你,我很抱歉,请原谅我不整洁的代码。
### 3 功能简介
+ 想详细了解类之间的关系,可查看第5节
#### 3.1 用户类User
+ ``User``是使用区块链记账系统的用户类,其有如下功能:
``` c++
class User {
public:
string UserName; // 用户名
string sRSAPriKey; // 私钥
string sRSAPubKey; // 公钥
double USD; // 账户余额
string Wallet; // 钱包
User(); // 用户构造函数
User(const string& name);
~User(); // 析构函数
void info(); // 查询用户信息
Record PayTo(User seller, double cost); // 用户付款给卖家
private:
string _pub_key_path; // 公钥文件路径
void _GenerateRSAkey(); // 生成密钥对
};
```
#### 3.2 记录类Record
+ ``Record``表示每次发生交易生成的记录,其有如下功能:
``` c++
class Record {
public:
string clear_text; // 明文
vector<char> cripher_text; // 暗文
string pub_key; // 买家公钥
int status; // 状态: -1表示信息不完成且未录入,0表示信息完整且待录入,1表示录入成功
string ReturnTime(); // 返回时间
string PubKey_Path; // 公钥文件路径
Record(); // 空参构造函数
Record(const string& sell, const string& buy, double cost); // 交易记录构造函数
~Record(); // 微不足道的析构函数
void recovery(); // 从明文中恢复交易记录
void print(); // 打印交易记录
string toString(); // 生成交易字符串
private:
string _Seller; // 卖家
string _Buyer; // 买家
double _Value; // 交易价格
time_t _Time; // 交易时间
};
```
#### 3.3 记录序列类RecordList
+ ``RecordList``为录入的交易记录的集合,其有如下功能:
``` c++
class RecordList {
public:
RecordList(); // 交易记录列表生成
int size(); // 查询交易记录列表大小
void print(); // 打印交易记录列表信息
string toString(); // 转换交易列表信息为String
void AppendRecord(Record rNew); // 插入新记录
void AppendRecordFromFile(string RecordFileName); // 从文件读入记录信息
private:
vector<Record> _vRL; // 交易记录列表数据
};
```
#### 3.4 区块类Block
+ ``Block``表示区块,与RecordList类一一对应,其有如下功能:
``` c++
class Block {
public:
// 规定一个区块的hash必须以ndifficulty个0开头
string sHash; // 当前区块的哈希值字符串
string sPrevHash; // 链接上一区块的哈希值字符串
Block(uint32_t nIndexIn, const string& info); // 消息生成区块
Block(uint32_t nIndexIn, RecordList& RL); // 导入RecordList生成区块
void MineBlock(uint32_t nDifficulty); // 挖矿
void print(); // 打印区块
string toString();
private:
uint32_t _nIndex; // 区块编号:该区块唯一编号
uint32_t _nNonce; // 工作量证明:表明获取这个区块总共计算了多少次
string _sData; // 区块交易数据,采用RecordList.toString()的数据
time_t _tTime; // 区块生成时间
string _CalculateHash() const; // 计算哈希值
};
```
#### 3.5 区块链类Blockchain
+ ``Blockchain``表示区块链,其有如下功能:
``` c++
class Blockchain {
public:
Blockchain(); // 区块链构造函数
Blockchain(uint32_t nDifficulty); // 注意:难度不要设置太高不然你显卡就炸了
void AppendBlock(Block bNew); // 添加区块
int size(); // 查询区块链大小
void print(); // 打印区块链
string toString();
private:
vector<Block> _vChain;// 区块链数据
uint32_t _nDifficulty;// 难度级别:建议设为3~4
Block _GetLastBlock() const;// 取最后区块
};
```
#### 3.6 部分其它类
+ rsa2048:有基于 ``openssl``与``boost``库编写的工具类``RSATool``,它有如下功能:
+ 通过RSA-2048算法生成密钥对,并存入文件``prikey.pem``, ``pubkey.pem``
+ 生成用户钱包名称``Wallet``
+ 通过(私钥文件/字符串)加密明文``clear_text``
+ 通过(公钥文件/字符串)解密暗文``cripher_text``
+ 比对明文与暗文,并输出验证结果
+ 序列化``Record``类到文件``./public/record.txt``,可进行读写操作
+ sha256:提供了SHA-256算法。
+ 注:
+ RSA-2048:为非对称成加密算法,发送方和接收方均各有一组公钥和私钥key。因存在幂运算,其计算速度远远小于AES-256。可用于对小量数据的加密,如用于对密钥key的加密。是密钥交换协议的重要组成部分。采用公钥进行加密,采用私钥进行解密。
+ SHA-256:不�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 毕业设计 基于C++的区块链模拟记账系统源码+详细文档+全部资料(高分项目).zip毕业设计 基于C++的区块链模拟记账系统源码+详细文档+全部资料(高分项目).zip毕业设计 基于C++的区块链模拟记账系统源码+详细文档+全部资料(高分项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕设项目、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 3、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计 基于C++的区块链模拟记账系统源码+详细文档+全部资料(高分项目).zip (41个子文件)
Item_BlockChain-main
env
Win32OpenSSL-1_1_1p.msi 55.38MB
source
RecordList.h 627B
Blockchain.cpp 2KB
sha256.h 2KB
sha256.cpp 4KB
rsa2048.h 1KB
main.cpp 1KB
rsa2048.cpp 12KB
User.cpp 2KB
User.h 665B
Blockchain.h 731B
Record.h 904B
SHA256-LICENSE.txt 2KB
RecordList.cpp 2KB
Block.h 1016B
Block.cpp 2KB
Record.cpp 1KB
README.md 21KB
attachment
Clipboard_2022-07-06-14-41-35.png 69KB
Clipboard_2022-07-06-14-24-50.png 75KB
Clipboard_2022-07-06-15-07-44.png 40KB
Clipboard_2022-07-06-15-27-02.png 147KB
Clipboard_2022-07-06-15-03-40.png 38KB
image-20220707173303296.png 371KB
Clipboard_2022-07-06-12-45-01.png 38KB
Clipboard_2022-07-06-12-35-07.png 187KB
Clipboard_2022-07-06-12-30-51.png 187KB
Clipboard_2022-07-06-14-34-09.png 45KB
Clipboard_2022-07-06-14-15-48.png 1.03MB
Clipboard_2022-07-06-14-14-29.png 170KB
Clipboard_2022-07-06-14-23-24.png 407KB
Clipboard_2022-07-06-14-52-18.png 56KB
Clipboard_2022-07-06-15-31-44.png 10KB
Clipboard_2022-07-06-14-23-36.png 396KB
Clipboard_2022-07-06-12-54-17.png 53KB
Clipboard_2022-07-06-14-21-11.png 414KB
Clipboard_2022-07-06-14-13-00.png 374KB
Clipboard_2022-07-06-14-33-01.png 23KB
Clipboard_2022-07-06-14-14-11.png 170KB
Clipboard_2022-07-06-14-03-31.png 1.85MB
171265889347208773632.zip 416B
共 41 条
- 1
资源评论
不走小道
- 粉丝: 3174
- 资源: 3971
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 青岛大学人工智能实验二 利用α-β搜索的博弈树算法编写一字棋游戏
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 289ssm-mysql-jsp 计算机课程实验管理系统.zip(可运行源码+数据库文件+文档)
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 20-天天果园项目.rar
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- 自助购药小程序源代码含文档
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功