区块链日记程序.docxVIP

  • 4
  • 0
  • 约1.28万字
  • 约 12页
  • 2023-06-14 发布于湖北
  • 举报
数据安全课程报告 二零二零年 课程报告题目:区块链日记程序 要求: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精品文档

相关文档