.Net加密与解密——散列运算

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:   一,散列运算的特点             1,散列运算是不可逆的,可以将散列运算理解为单向的加密; 2,任何两个不相同的文件,哪怕只有一个字节的细微差别,得到的摘要都是完全不同的。


  一,散列运算的特点

           

1,散列运算是不可逆的,可以将散列运算理解为单向的加密;


2,任何两个不相同的文件,哪怕只有一个字节的细微差别,得到的摘要都是完全不同的。这个特点的意义在于,可以用来判断消息是否被篡改,即解决完整性的问题。


3,无论原始消息的大小如何,运算得出的摘要的信息是固定长度,摘要的长度根据散列算法的不同而不同。





二,利用散列运算判断消息是否被篡改的流程 


1,发送放对消息进行散列运算,得到消息摘要,发送消息和摘要,并说明获得摘要所使用的散列算法。


2,接收方获得消息和原始摘要,使用相同的散列算法对收到的消息进行散列运算,重新获得一个摘要。


3,对比原始摘要和本地摘要,如果两个相同,则认为消息没有被篡改,否则认为被篡改过了。





三,.Net中实现散列运算Demo



        

namespace 散列运算
{
    //普通散列运算类
    public class HashAlgorithmType {

        public const string SHA1 = "SHA1";
        public const string SHA256 = "SHA256";
        public const string SHA384 = "SHA384";
        public const string SHA512 = "SHA512";
        public const string MD5 = "MD5";
       
    
    }
    class Program
    {
        static void Main(string[] args)
        {
            string plainText = "hello,world";

            //初始化对象
            HashAlgorithm alg = HashAlgorithm.Create(HashAlgorithmType.SHA1); //SHA1Managed ALG = new SHA1Managed();
           

           // KeyedHashAlgorithm ALG = new HMACSHA1(Encoding.Default.GetBytes("secret key data"));//密钥散列运算,多一个密钥参数


            //将字符串转换为字节数组
            byte[] plainData = Encoding.Default.GetBytes(plainText);

            //获得摘要
            byte[] hashData = alg.ComputeHash(plainData);//此处参数为字节数组或者流

            //输出结果
            foreach (byte b in hashData)
            {
                Console.Write("{0:x2}", b);
            }

        }
    }


}




四,分析散列运算的安全隐患


            如果在发送消息的过程中,信息被第三方截获,得到原始消息和消息摘要,此时,更改原始消息,并重新计算消息摘要并发送,接收方就不会发现消息是被篡改过的。并且,在发送消息的过程中,信息是未被加密的,第三方可以看到消息内容,不具备保密性。









目录
相关文章
|
5月前
|
存储 数据安全/隐私保护
.NET Core 究竟隐藏着怎样的神秘力量,能实现强身份验证与数据加密?
【8月更文挑战第28天】在数字化时代,数据安全与身份验证至关重要。.NET Core 提供了强大的工具,如 Identity 框架,帮助我们构建高效且可靠的身份验证系统,并支持高度定制化的用户模型和认证逻辑。此外,通过 `System.Security.Cryptography` 命名空间,.NET Core 还提供了丰富的加密算法和工具,确保数据传输和存储过程中的安全性。以下是一个简单的示例,展示如何使用 .NET Core 的 Identity 框架实现用户注册和登录功能。
44 3
|
7月前
|
Java C# 数据安全/隐私保护
|
7月前
|
开发框架 Java .NET
WAF攻防-权限控制&代码免杀&异或运算&变量覆盖&混淆加密&传参
WAF攻防-权限控制&代码免杀&异或运算&变量覆盖&混淆加密&传参
|
6月前
|
算法 安全 数据安全/隐私保护
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
|
8月前
|
C# 数据安全/隐私保护
一款实用的.NET Core加密解密工具类库
一款实用的.NET Core加密解密工具类库
|
算法 网络安全 C#
一个基于.Net开发齐全的加密库
一个基于.Net开发齐全的加密库
98 0
|
小程序 数据安全/隐私保护 Python
Python——验证椭圆曲线加密点乘运算
Python——验证椭圆曲线加密点乘运算
171 0
|
开发框架 .NET 网络安全
虚拟主机ASP.NET 使用SSL加密465端口发邮件demo
虚拟主机ASP.NET 使用SSL加密465端口发邮件demo
|
Rust 数据可视化 安全
【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较
突然想打算把Rust作为将来自己主要的副编程语言。当然,主语言还是C#,毕竟.NET平台这么强大,写起来就是爽。缘起:之前打算一些新的产品或者新的要开发的东西,由于没有历史包袱,就想重新选型一下,在.NET平台(C#语言)、Golang、Rust里面进行选择一个。
309 0
【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较
|
缓存 安全 网络安全
Shiro框架02权限认证+MD5加盐加密+散列1024+Hex/Base64(源码)
Shiro框架02权限认证+MD5加盐加密+散列1024+Hex/Base64(源码)
Shiro框架02权限认证+MD5加盐加密+散列1024+Hex/Base64(源码)