区块链日记程序.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

祝朝兵 + 关注
实名认证
内容提供者

原版文件原创

1亿VIP精品文档

相关文档