- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据安全课程报告
二零二零年
课程报告题目:区块链日记程序
要求:1.程序可以输入日记内容
2.需要将日记内容进行加密
3.能够将加密数据写入区块链
4.能够读取链上加密数据
5.读取的加密数据进行解密
6.解密后再程序中显示
模块规划:
1、创建一个具体的区块数据模型
public struct Block
{
/// summary
/// 区块位置
/// /summary
public int Index { get; set; }
/// summary
/// 区块生成时间戳
/// /summary
public string TimeStamp { get; set; }
/// summary
/// 心率数值
/// /summary
public int BPM { get; set; }
/// summary
/// 区块 SHA-256 散列值
/// /summary
public string Hash { get; set; }
/// summary
/// 前一个区块 SHA-256 散列值
/// /summary
public string PrevHash { get; set; }
}
2、之后新建一个 BlockGenerator 静态类用于管理区块链,并且使用一个 List 保存区块链数据。
public static class BlockGenerator
{
public static ListBlock _blockChain = new ListBlock();
}
3、使用散列算法,确保每一个块的 PrevHash 值等于前一个块中的 Hash 值,这样就以正确的块顺序构建出链:
4.散列与生成区块。使用散列是因为可以使用极少的控件生成每一个区块的唯一标识,而且可以维持整个区块链的完整性,通过每个区块存储的前一个链的散列值,我们就可以确保区块链当中每一个区块的正确性,任何针对区块的无效更改都会导致散列值的改变,也就破坏了区块链。
那么就在 BlockGenerator 当中添加一个函数用于计算 Block 的
public static string CalculateHash(Block block)
{
string calculationStr = ${block.Index}{block.TimeStamp}{block.BPM}{block.PrevHash};
SHA256 sha256Generator = SHA256.Create();
byte[] sha256HashBytes = sha256Generator.ComputeHash(Encoding.UTF8.GetBytes(calculationStr));
StringBuilder sha256StrBuilder = new StringBuilder();
foreach (byte @byte in sha256HashBytes)
{
sha256StrBuilder.Append(@byte.ToString(x2));
}
return sha256StrBuilder.ToString();
}
这里的 CalculateHash 函数接收一个 Block 实例,通过该实例当中的 Index、TimeStamp、BPM、PrevHash 的值来计算出当前块的 SHA256 Hash 值,之后我们就可以来编写一个生成块的函数:
这个函数需要接收前一个块对象的值,用于新区块的 Index 递增以及 新的 SHA256 Hash 计算。
这里掺入了一个 CalculateCurrentTimeUTC 函数,该函数主要是用于将 DateTime.Now 时间转换为 UTC 时间,如下:
/// summary
/// 计算当前时间的 UTC 表示格式
/// /summary
/// returnsUTC 时间字符串/returns
public static string CalculateCurrentTimeUTC()
{
DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime nowTime = DateTime.Now;
long unixTime = (long)Math.Round((nowTime
您可能关注的文档
- 《创新思维与问题解决——五个步骤创造性解决问题》.doc
- 提高高危患者预防措施落实率医院护理品管圈QCC成果汇报PPT(完整版本易修改).pptx
- 醛的性质PPT课件.pptx
- 乳癌改良根治术护理查房.pptx
- 可编程医用电气系统(PEMS)自查表及检查文件清单(2023.docx
- 一平台机考《会计学概论》复习资料三.docx
- 第九单元《数学广角—推理》教材解析-人教版数学二年级下册.doc
- 教科版小学六年级下册科学期末考试卷带答案(完整版) (1).docx
- 中国浙江省地图PPT模板.pptx
- 少年宫英语口语社团教案-完整版.doc
- 2024年中考化学二轮复习专题训练:物质的检验、鉴别、除杂及成分确定(含答案).pdf
- 2024年中考化学二轮复习专题训练:实验题(含答案).pdf
- 电路理论-华科电气-7-First-Order-Circuits-2.pptx
- 职业病危害防治安全知识培训优质课件公开课获奖课件省赛课一等奖课件.pptx
- 第五章-离子聚合.pptx
- 五年级漫画习作《父与子》--《如此父子》看图写话省名师优质课赛课获奖课件市赛课一等奖课件.pptx
- 像山那样思考主题培训课件.pptx
- 九年级感叹句的用法省公开课获奖课件说课比赛一等奖课件.pptx
- 了不起的狐狸爸爸(阅读交流课)ppt.ppt-(1)省公开课获奖课件说课比赛一等奖课件.pptx
- 网络安全审计及回溯分析课件.pptx
文档评论(0)