C# | 上位机开发新手指南(六)摘要算法

在这里插入图片描述

上位机开发新手指南(六)摘要算法

前言

你知道摘要算法么?它在保障数据安全方面非常有用!

它能够将任意长度的数据转换成固定长度的消息摘要,从而确保数据的完整性和可靠性。比如说,我们下载软件的时候,就可以用摘要算法来检验软件是否被篡改,保障我们的电脑安全。

那这个算法的工作原理是怎样的呢?大致就是通过一系列复杂的计算,将原始数据转换为一个固定长度的摘要信息。而且无论输入的数据大小,输出的摘要信息长度都是一样的。

那么摘要算法有什么用处呢?比如数字签名,确保数据的来源和内容没有被篡改。还有密码学等领域的应用,可以说是非常厉害了!

那常见的摘要算法有哪些呢?比较常见的有MD5、SHA-1、SHA-2、SHA-3、BLAKE2、RIPEMD、Whirlpool和Keccak等。它们各有不同的优缺点和适用场景,我们需要根据实际情况来选择使用哦。

常见摘要算法源码

MD5算法

MD5是一种广泛使用的哈希算法,将任意长度的数据计算为128位的哈希值。尽管它被广泛使用,但是因为它已经被证明存在安全漏洞,现在已经不再被推荐使用。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string input = "Hello, world!";

        // 使用 MD5 算法生成摘要
        string md5Hash = GetMd5Hash(input);
        Console.WriteLine($"MD5 hash of {input}: {md5Hash}");
    }

    // 使用 MD5 算法生成摘要
    static string GetMd5Hash(string input)
    {
        using (MD5 md5 = MD5.Create())
        {
            // 将输入字符串转换为字节数组
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);

            // 计算哈希值
            byte[] hashBytes = md5.ComputeHash(inputBytes);

            // 将哈希值转换为字符串
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                builder.Append(hashBytes[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }
}

代码中使用了 System.Security.Cryptography 命名空间中的 MD5 类。在方法中,先将字符串转换为字节数组,然后调用 MD5 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

SHA-1算法

SHA-1是一种用于计算数据哈希值的加密算法,将任意长度的数据计算为160位的哈希值。目前,SHA-1算法也已经被证明存在安全漏洞,现在不再被推荐使用。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string input = "Hello, world!";

        // 使用 SHA-1 算法生成摘要
        string sha1Hash = GetSha1Hash(input);
        Console.WriteLine($"SHA-1 hash of {input}: {sha1Hash}");
    }

    // 使用 SHA-1 算法生成摘要
    static string GetSha1Hash(string input)
    {
        using (SHA1 sha1 = SHA1.Create())
        {
            // 将输入字符串转换为字节数组
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);

            // 计算哈希值
            byte[] hashBytes = sha1.ComputeHash(inputBytes);

            // 将哈希值转换为字符串
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                builder.Append(hashBytes[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }
}

代码中使用了 System.Security.Cryptography 命名空间中的 SHA1 类。在方法中,先将字符串转换为字节数组,然后调用 SHA1 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

SHA-256算法

SHA-256是一种用于计算数据哈希值的加密算法,将任意长度的数据计算为256位的哈希值。它是SHA-2算法族中的一员,比SHA-1更安全。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string input = "Hello, world!";

        // 使用 SHA-256 算法生成摘要
        string sha256Hash = GetSha256Hash(input);
        Console.WriteLine($"SHA-256 hash of {input}: {sha256Hash}");
    }

    // 使用 SHA-256 算法生成摘要
    static string GetSha256Hash(string input)
    {
        using (SHA256 sha256 = SHA256.Create())
        {
            // 将输入字符串转换为字节数组
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);

            // 计算哈希值
            byte[] hashBytes = sha256.ComputeHash(inputBytes);

            // 将哈希值转换为字符串
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                builder.Append(hashBytes[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }
}

代码中使用了 System.Security.Cryptography 命名空间中的 SHA256 类。在方法中,先将字符串转换为字节数组,然后调用 SHA256 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

SHA-512算法

SHA-512是一种用于计算数据哈希值的加密算法,将任意长度的数据计算为512位的哈希值。它是SHA-2算法族中的一员,比SHA-256更安全。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string input = "Hello, world!";

        // 使用 SHA-512 算法生成摘要
        string sha512Hash = GetSha512Hash(input);
        Console.WriteLine($"SHA-512 hash of {input}: {sha512Hash}");
    }

    // 使用 SHA-512 算法生成摘要
    static string GetSha512Hash(string input)
    {
        using (SHA512 sha512 = SHA512.Create())
        {
            // 将输入字符串转换为字节数组
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);

            // 计算哈希值
            byte[] hashBytes = sha512.ComputeHash(inputBytes);

            // 将哈希值转换为字符串
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                builder.Append(hashBytes[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }
}

代码中使用了 System.Security.Cryptography 命名空间中的 SHA512 类。在方法中,先将字符串转换为字节数组,然后调用 SHA512 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

BLAKE2算法

BLAKE2是BLAKE算法的改进版,是一种快速、安全的哈希函数,支持多种哈希长度,其中BLAKE2b和BLAKE2s分别支持512位和256位哈希值。它在安全性和性能方面都表现优异,被广泛应用于密码学和安全领域。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string input = "Hello, world!";

        // 使用 BLAKE2 算法生成摘要
        string blake2bHash = GetBlake2bHash(input);
        Console.WriteLine($"BLAKE2b hash of {input}: {blake2bHash}");

        string blake2sHash = GetBlake2sHash(input);
        Console.WriteLine($"BLAKE2s hash of {input}: {blake2sHash}");
    }

    // 使用 BLAKE2b 算法生成摘要
    static string GetBlake2bHash(string input)
    {
        using (BLAKE2b blake2b = BLAKE2b.Create())
        {
            // 将输入字符串转换为字节数组
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);

            // 计算哈希值
            byte[] hashBytes = blake2b.ComputeHash(inputBytes);

            // 将哈希值转换为字符串
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                builder.Append(hashBytes[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }

    // 使用 BLAKE2s 算法生成摘要
    static string GetBlake2sHash(string input)
    {
        using (BLAKE2s blake2s = BLAKE2s.Create())
        {
            // 将输入字符串转换为字节数组
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);

            // 计算哈希值
            byte[] hashBytes = blake2s.ComputeHash(inputBytes);

            // 将哈希值转换为字符串
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                builder.Append(hashBytes[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }
}

代码中使用了 System.Security.Cryptography 命名空间中的 BLAKE2b 和 BLAKE2s 类。在方法中,先将字符串转换为字节数组,然后调用 BLAKE2 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

RIPEMD算法

RIPEMD是一种比较老的哈希算法,支持多种哈希长度,其中RIPEMD-160和RIPEMD-256分别支持160位和256位哈希值。它在安全性方面比MD5强,但性能较慢。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string input = "Hello, world!";

        // 使用 RIPEMD-160 算法生成摘要
        string ripemd160Hash = GetRipemd160Hash(input);
        Console.WriteLine($"RIPEMD-160 hash of {input}: {ripemd160Hash}");

        // 使用 RIPEMD-256 算法生成摘要
        string ripemd256Hash = GetRipemd256Hash(input);
        Console.WriteLine($"RIPEMD-256 hash of {input}: {ripemd256Hash}");
    }

    // 使用 RIPEMD-160 算法生成摘要
    static string GetRipemd160Hash(string input)
    {
        using (RIPEMD160 ripemd160 = RIPEMD160.Create())
        {
            // 将输入字符串转换为字节数组
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);

            // 计算哈希值
            byte[] hashBytes = ripemd160.ComputeHash(inputBytes);

            // 将哈希值转换为字符串
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                builder.Append(hashBytes[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }

    // 使用 RIPEMD-256 算法生成摘要
    static string GetRipemd256Hash(string input)
    {
        using (RIPEMD256 ripemd256 = RIPEMD256.Create())
        {
            // 将输入字符串转换为字节数组
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);

            // 计算哈希值
            byte[] hashBytes = ripemd256.ComputeHash(inputBytes);

            // 将哈希值转换为字符串
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                builder.Append(hashBytes[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }
}

代码中使用了 System.Security.Cryptography 命名空间中的 RIPEMD160 和 RIPEMD256 类。在方法中,先将字符串转换为字节数组,然后调用 RIPEMD 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

Whirlpool算法

Whirlpool是一种强度很高的哈希算法,支持512位哈希值。它具有高度的安全性和抗碰撞性,并且被广泛应用于数字签名、身份验证和数据完整性验证等领域。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string input = "Hello, world!";

        // 使用 Whirlpool 算法生成摘要
        string whirlpoolHash = GetWhirlpoolHash(input);
        Console.WriteLine($"Whirlpool hash of {input}: {whirlpoolHash}");
    }

    // 使用 Whirlpool 算法生成摘要
    static string GetWhirlpoolHash(string input)
    {
        using (Whirlpool whirlpool = Whirlpool.Create())
        {
            // 将输入字符串转换为字节数组
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);

            // 计算哈希值
            byte[] hashBytes = whirlpool.ComputeHash(inputBytes);

            // 将哈希值转换为字符串
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                builder.Append(hashBytes[i].ToString("x2"));
            }
            return builder.ToString();
        }
    }
}

代码中使用了 System.Security.Cryptography 命名空间中的 Whirlpool 类。在方法中,先将字符串转换为字节数组,然后调用 Whirlpool 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你想学习C#工控上位开发,这是一个非常实用的技能!以下是一些学习C#工控上位开发的步骤和资源: 1. 掌握C#语言基础:首先,你需要对C#语言有一定的了解。你可以通过阅读教材、参加在线课程或观看教学视频来学习C#的基础知识。 2. 学习工控上位基础知识:了解工控系统的基本概念和原理,包括PLC(可编程逻辑控制器)、HMI(人界面)等。这将帮助你理解工控上位开发的背景和需求。 3. 学习工控上位开发框架:掌握常用的工控上位开发框架,如.NET Framework、WPF(Windows Presentation Foundation)等。这些框架提供了丰富的工具和库,可以简化工控上位应用程序的开发过程。 4. 学习通信协议:熟悉常用的工控通信协议,如Modbus、OPC UA等。理解这些协议的原理和使用方法,可以帮助你在工控上位应用中进行设备通信和数据交换。 5. 实践项目:通过完成一些实际的工控上位项目,锻炼你的开发技能。可以选择一些简单的项目开始,逐渐增加复杂度和功能。 6. 参考资料和资源:在学习过程中,可以参考一些相关的书籍、教程和在线资源。例如,CSDN、Stack Overflow等技术社区上有很多与C#工控上位开发相关的文章和讨论。 记住,工控上位开发是一个复杂的领域,需要不断学习和实践才能掌握。祝你学习顺利!如果有更多问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿长大人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值