0
点赞
收藏
分享

微信扫一扫

c# .net sha1加密的几种形式,经过微信签名测试有效

推荐使用(经过微信签名测试有效)

/// <summary>
/// Sha1签名
/// </summary>
/// <param name="str">内容</param>
/// <param name="encoding">编码</param>
/// <returns></returns>
private static string Sha1Signature(string str, Encoding encoding=null)
{
if (encoding == null) encoding = Encoding.UTF8;
var buffer = encoding.GetBytes(str);
var data = SHA1.Create().ComputeHash(buffer);
StringBuilder sub = new StringBuilder();
foreach (var t in data)
{
sub.Append(t.ToString("x2"));
}

return sub.ToString();
}
tostring("x2")中

x表示16进制 而且区分大小写 X输出为大写 x输出为小写

调用

string resultStr="我是内容";
Sha1Signature(resultStr, Encoding.UTF8);

有一种比较简单

SHA1相关类:

System.Security.Cryptography.SHA1

System.Security.Cryptography.SHA1CryptoServiceProvider()

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "SHA1")

 这种 官方提示已过时

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "SHA1")

实现1

/// <summary>
/// 对字符串SHA1加密
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="encoding">编码类型</param>
/// <returns>加密后的十六进制字符串</returns>
public static string Sha1Encrypt(string source, Encoding encoding = null)
{
if (encoding == null) encoding = Encoding.UTF8;

// 第一种方式
byte[] byteArray = encoding.GetBytes(source);
using (HashAlgorithm hashAlgorithm = new SHA1CryptoServiceProvider())
{
byteArray = hashAlgorithm.ComputeHash(byteArray);
StringBuilder stringBuilder = new StringBuilder(256);
foreach (byte item in byteArray)
{
stringBuilder.AppendFormat("{0:x2}", item);
}
hashAlgorithm.Clear();
return stringBuilder.ToString();
}

第二种方式
//using (SHA1 sha1 = SHA1.Create())
//{
// byte[] hash = sha1.ComputeHash(encoding.GetBytes(source));
// StringBuilder stringBuilder = new StringBuilder();
// for (int index = 0; index < hash.Length; ++index)
// stringBuilder.Append(hash[index].ToString("x2"));
// sha1.Clear();
// return stringBuilder.ToString();
//}
}
tostring("x2")中

x表示16进制 而且区分大小写 X输出为大写 x输出为小写

实现2

/// <summary>
/// SHA1 加密,返回大写字符串
/// </summary>
/// <param name="content">需要加密字符串</param>
/// <returns>返回40位UTF8 大写</returns>
public static string SHA1(string content)
{
return SHA1(content, Encoding.UTF8);
}
/// <summary>
/// SHA1 加密,返回大写字符串
/// </summary>
/// <param name="content">需要加密字符串</param>
/// <param name="encode">指定加密编码</param>
/// <returns>返回40位大写字符串</returns>
public static string SHA1(string content, Encoding encode)
{
try
{
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] bytes_in = encode.GetBytes(content);
byte[] bytes_out = sha1.ComputeHash(bytes_in);
sha1.Dispose();
string result = BitConverter.ToString(bytes_out);
result = result.Replace("-", "");
return result;
}
catch (Exception ex)
{
throw new Exception("SHA1加密出错:" + ex.Message);
}
}

实现3

转载:

​​Asp.Net 实现SHA1加密-HiError​​

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace WebToolkit.Encrypt
{
public class SHA1Helper
{
/// <summary>
/// Net实现Sha1加密算法
/// </summary>
/// <param name="str">要加密的字符串,默认编码为UTF-8</param>
/// <returns>加密后的十六进制的哈希散列(字符串)</returns>
public static string Sha1Signature(string str)
{
return Sha1Signature(str, Encoding.UTF8);
}

public static string Sha1Signature(string str, Encoding encoding)
{
var buffer = encoding.GetBytes(str);
var data = SHA1.Create().ComputeHash(buffer);
StringBuilder sub = new StringBuilder();
foreach (var t in data)
{
sub.Append(t.ToString("X2"));
}

return sub.ToString();
}
}
}
tostring("x2")中

x表示16进制 而且区分大小写 X输出为大写 x输出为小写


举报

相关推荐

0 条评论