zoukankan      html  css  js  c++  java
  • .Net之美读书笔记9

    加密与解密

    在消息传输的情境下,加密与解密是为了保证消息的安全。

    保证消息安全的三要性

    • 完整性 消息的接收方可以确保消息在传输过程中没被篡改过
    • 保密性 消息的发送方能够确定消息只有预期的接收方可理解(第三方截获的消息加密,不能理解)
    • 可认证性 消息的接受方可以确定消息是谁发来的

    散列算法保证消息的完整性

    散列算法可以对任何数据进行散列运算的到摘要。散列算法的特点:运算的不可逆性 源极小修改摘要不同 摘要为64bit或128bit
    消息进行散列运算产生摘要,发送发将消息和摘要发送给接受方,接收方收到后以相同的散列算法得到消息摘要,再将两份摘要比对。发送方和接收方对消息加盐,得到摘要,放在第三方修改消息同事修改摘要。

        public class Sender
        {
            private string message = "Hello World!";
            private string salt = "[good]";
    
            private byte[] GetHasHData(string message)
            {
                HashAlgorithm alg = HashAlgorithm.Create("SHA1");
                byte[] plainData = Encoding.Default.GetBytes(this.salt + message);
                byte[] hashData = alg.ComputeHash(plainData);
                return hashData;
            }
    
            public Tuple<byte[], string> SendMessage()
            {
                byte[] hashData = this.GetHasHData(message);
                return Tuple.Create(hashData, message);
            }
        }
         public class Receiver
        {
            private string message = string.Empty;
            private string salt = "[good]";
    
            public bool ReceiveData(Tuple<byte[], string> data)
            {
                byte[] sourceHashData = data.Item1;
                string msg = data.Item2;
    
                HashAlgorithm alg = HashAlgorithm.Create("SHA1");
                byte[] plainData = Encoding.Default.GetBytes(this.salt + msg);
                byte[] hashData = alg.ComputeHash(plainData);
    
                if(sourceHashData.SequenceEqual(hashData))
                {
                    this.message = msg;
                    return true;
                }
                else
                {
                    return false;
                }
            }
    
            public void DisplayMsg()
            {
                Console.WriteLine(this.message);
            }
        }
        //调用
         Sender sender = new Sender();
                Receiver receiver = new Receiver();
                if (receiver.ReceiveData(sender.SendMessage()))
                {
                    receiver.DisplayMsg();
                }
    

    这里散列算法都继承自HashAlgorithm,创建方法为HashAlgorithm.Create("SHA1"),通过传入不同的参数得到不同的算法(MD5,SHA,SHA1等)。

    对称加密保证消息的保密性

    将消息通过密钥加密得到消息的密文,发送方将密文发送,接收方用同一个密钥对密文进行解密的到原文。

    非对称加密

    非对称加密有两个密钥,一个公钥,一个私钥。消息经公钥加密得到密文,密文只能经对应的私钥解密为明文。
    实现可认证性:甲方(发送方)有甲私钥(自己的私钥)与乙公钥,乙方有甲方公钥与乙私钥(自己的)。

    1. 加密性
      甲方用乙方公钥加密为密文,将密文发送给乙方。密文需要乙方私钥解密,第三方无法理解秘闻。
    2. 认证性
      甲方用甲私钥加密为密文,发送给乙方。乙方接到消息后用甲公钥解密,能成功解密认证消息是甲方所发。

    数字签名

    数字签名保证消息的完整性和认证性,用散列得到消息摘要,再对摘要进行非对称加密(为解决对称加密和非对称加密耗时问题)。

  • 相关阅读:
    获得Coclor的色值(小技巧)
    如何禁止IIS缓存静态文件(png,js,html等)(转)
    风投最关心的问题
    Repeater一行显示数据库中多行表记录
    c# int Int32 Int64 的区别
    动车实名制了
    学习,积累,10000小时定律
    映射路由器到内网ip和端口
    《轮环》故事大纲整理
    .Net读取xlsx文件Excel2007
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/8051738.html
Copyright © 2011-2022 走看看