数据安全课程报告二零二零年课程报告题目:区块链日记程序要求:1.程序可以输入日记内容 2.需要将日记内容进行加密3.能够将加密数据写入区块链4.能够读取链上加密数据5.读取的加密数据进行解密6.解密后再程序中显示模块规划:1、创建一个具体的区块数据模型public struct Block{ /// /// 区块位置 /// public int Index { get; set; } /// /// 区块生成时间戳 /// public string TimeStamp { get; set; } /// /// 心率数值 /// public int BPM { get; set; } /// /// 区块 SHA-256 散列值 /// public string Hash { get; set; } /// /// 前一个区块 SHA-256 散列值 /// public string PrevHash { get; set; }}2、之后新建一个 BlockGenerator 静态类用于管理区块链,并且使用一个 List 保存区块链数据。public static class BlockGenerator{ public static List _blockChain = new List();}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 值,之后我们就可以来编...