C# 使用MD5等哈希算法

C# 使用MD5等哈希算法

问题描述

在对密码等敏感信息进行网络传输和保存时,往往不直接保存其原本值,而是在服务器端数据库存储其哈希值,比较常用的有如MD5,SHA1等等。而客户端则需要将用于输入的明文密码转换为MD5(或其他哈希算法)哈希值后再传输给服务器。

解决方法

客户端对MD5加密的程序如下:
1.首先引用命名空间System.Security.Cryptography

using System.Security.Cryptography;

2.为了方便使用,编写一个GetMD5方法,用来返回一个字符串,即为给定字符串的MD5哈希值:

/// <summary>
/// 返回给予字符串的32字节大写MD5字符串
/// </summary>
/// <param name="str">待计算MD5值的字符串</param>
private string GetMD5(string str)
{
    byte[] sourcebytes = Encoding.Default.GetBytes(str);
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] hashedbytes = md5.ComputeHash(sourcebytes);
    return BitConverter.ToString(hashedbytes).Replace("-", "");
}

3.调用方法如下:

private void btnLogin_Click(object sender, EventArgs e)
{
    // 计算输入密码的MD5
    string ConvertedPswd = GetMD5(txtToken.Text);
    // TODO: 将MD5值发送到服务器,并得到验证结果等
    // 
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 提供了多种哈希函数算法,可以根据需求选择使用。以下是其中几种常用的哈希函数算法: 1. MD5使用 128 位哈希值,适用于校验数据完整性。 ```csharp using System.Security.Cryptography; public string ComputeMD5Hash(string input) { using (MD5 md5 = MD5.Create()) { byte[] inputBytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = md5.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) sb.Append(hashBytes[i].ToString("x2")); return sb.ToString(); } } ``` 2. SHA1:使用 160 位哈希值,适用于校验数据完整性。 ```csharp using System.Security.Cryptography; public string ComputeSHA1Hash(string input) { using (SHA1 sha1 = SHA1.Create()) { byte[] inputBytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = sha1.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) sb.Append(hashBytes[i].ToString("x2")); return sb.ToString(); } } ``` 3. SHA256:使用 256 位哈希值,适用于安全敏感的数据。 ```csharp using System.Security.Cryptography; public string ComputeSHA256Hash(string input) { using (SHA256 sha256 = SHA256.Create()) { byte[] inputBytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = sha256.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) sb.Append(hashBytes[i].ToString("x2")); return sb.ToString(); } } ``` 4. SHA512:使用 512 位哈希值,适用于安全敏感的数据。 ```csharp using System.Security.Cryptography; public string ComputeSHA512Hash(string input) { using (SHA512 sha512 = SHA512.Create()) { byte[] inputBytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = sha512.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) sb.Append(hashBytes[i].ToString("x2")); return sb.ToString(); } } ``` 需要注意的是,哈希函数算法不是加密算法,只能用于校验数据完整性。如果需要加密数据,应该使用加密算法,如 AES、RSA 等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值