C# 哈希值计算:MD5/SHA256 加密

简介: 本示例展示了C#中使用MD5和SHA256算法生成哈希值的方法,适用于密码加密与数据校验。MD5安全性较低,建议仅用于非敏感场景;密码存储推荐使用SHA256配合盐值以增强安全性。

哈希算法用于将数据转换为固定长度的哈希值(不可逆),常用于密码存储、文件校验。
using System.Security.Cryptography;
using System.Text;

public class HashHelper
{
// 计算MD5哈希值(32位小写)
public static string ComputeMD5(string input)
{
if (string.IsNullOrEmpty(input)) return "";
using (MD5 md5 = MD5.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
// 转换为16进制字符串
StringBuilder sb = new StringBuilder();
foreach (byte b in hashBytes)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}
}

// 计算SHA256哈希值(64位小写)
public static string ComputeSHA256(string input)
{
    if (string.IsNullOrEmpty(input)) return "";
    using (SHA256 sha256 = SHA256.Create())
    {
        byte[] inputBytes = Encoding.UTF8.GetBytes(input);
        byte[] hashBytes = sha256.ComputeHash(inputBytes);
        StringBuilder sb = new StringBuilder();
        foreach (byte b in hashBytes)
        {
            sb.Append(b.ToString("x2"));
        }
        return sb.ToString();
    }
}

}

// 调用示例
string password = "123456";
string md5Hash = HashHelper.ComputeMD5(password);
string sha256Hash = HashHelper.ComputeSHA256(password);

Console.WriteLine($"密码:{password}");
Console.WriteLine($"MD5哈希(32位):{md5Hash}");
Console.WriteLine($"SHA256哈希(64位):{sha256Hash}");
// 输出:
// 密码:123456
// MD5哈希(32位):e10adc3949ba59abbe56e057f20f883e
// SHA256哈希(64位):8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
注意:MD5 安全性较低,建议用于非敏感数据校验;密码存储建议使用 SHA256 + 盐值(Salt)。

相关文章
|
机器学习/深度学习 监控 网络协议
zabbix批量导入监控主机
从excel表中批量导入被监控主机 自动根据分组名称创建分组 根据模板名称匹配主机监控模板
1474 0
zabbix批量导入监控主机
|
Linux Shell 数据安全/隐私保护
CentOS忘记密码重置密码教程
CentOS忘记密码重置密码教程
|
5月前
|
存储 安全 Linux
Proxmox VE 9.0 正式版发布 - 开源虚拟化管理平台
Proxmox VE 9.0 正式版发布 - 开源虚拟化管理平台
908 0
|
2天前
|
C#
C# 实现简单的二维码生成工具
基于 ZXing.Net 库生成二维码,支持自定义尺寸与保存路径,使用简便,需先安装对应 NuGet 包。
|
2天前
|
存储 缓存 安全
C# 字典(Dictionary):键值对存储的高效用法
`Dictionary<TKey, TValue>` 是键唯一且支持快速查找(O(1))的键值对集合,适用于存储映射关系。可通过 `Add` 添加、`TryGetValue` 安全获取、`Remove` 删除元素,遍历使用 `foreach`,建议优先使用 `TryGetValue` 提升性能。
|
2天前
|
C#
C# 枚举(Enum):规范常量定义
枚举用于定义命名常量,提升代码可读性与维护性。示例中定义订单状态枚举,演示赋值、转换、解析及遍历操作,避免使用魔法数字,使逻辑更清晰易懂。
|
2天前
|
安全 C#
C# 事件(Event):基于委托的观察者模式
事件是基于委托的封装机制,仅支持订阅与取消订阅,确保成员安全。常用于实现观察者模式,如订单状态变更时通知各系统,实现松耦合设计。
|
2天前
|
开发框架 .NET Java
C# LINQ:简化集合查询(基础用法)
LINQ是C#中集成的查询功能,可简洁高效地查询集合、数据库等数据源。通过示例演示了过滤、排序、分组、投影和聚合操作,展现其在处理产品列表时的强大与便捷。
|
2天前
|
C#
C# 异步编程:async/await 简化异步操作
`async/await` 是 C# 5.0+ 的异步编程语法糖,简化异步操作(如网络请求、文件读写),避免回调地狱。通过 `async` 标记异步方法,`await` 等待任务完成而不阻塞主线程,提升程序响应性和性能,适用于 I/O 密集型场景。

热门文章

最新文章