C# SHA

没有sha224

要注意每次计算完之后要把文件释放掉,再重新打开

否则会计算出错

static class MySHA
    {
        public static string[] GetSHAHash(string Message)
        {
            
                string[] sha = new string[4];
            try
            {
                SHA1 sha1 = new SHA1CryptoServiceProvider();
                SHA256 sha256 = new SHA256CryptoServiceProvider();
                SHA384 sha384 = new SHA384CryptoServiceProvider();
                SHA512 sha512 = new SHA512CryptoServiceProvider();

                byte[] sha_in = UTF8Encoding.Default.GetBytes(Message);

                byte[] sha1_out = sha1.ComputeHash(sha_in);
                byte[] sha256_out = sha256.ComputeHash(sha_in);
                byte[] sha384_out = sha384.ComputeHash(sha_in);
                byte[] sha512_out = sha512.ComputeHash(sha_in);

                sha[0] = BitConverter.ToString(sha1_out).Replace("-", "");
                sha[1] = BitConverter.ToString(sha256_out).Replace("-", "");
                sha[2] = BitConverter.ToString(sha384_out).Replace("-", "");
                sha[3] = BitConverter.ToString(sha512_out).Replace("-", "");
                return sha;
            }
            catch { MessageBox.Show("校验失败");return sha; }
        }
        public static string[] GetSHAHashFromFile(string fileName)
        {
            string[] sha = new string[4];
            try
            {
                
                SHA1 sha1 = new SHA1CryptoServiceProvider();
                SHA256 sha256 = new SHA256CryptoServiceProvider();
                SHA384 sha384 = new SHA384CryptoServiceProvider();
                SHA512 sha512 = new SHA512CryptoServiceProvider();

                FileStream file = new FileStream(fileName, FileMode.Open);
                byte[] sha1_out = sha1.ComputeHash(file);
                file.Close();
                file = new FileStream(fileName, FileMode.Open);
                byte[] sha256_out = sha256.ComputeHash(file);
                file.Close();
                file = new FileStream(fileName, FileMode.Open);
                byte[] sha384_out = sha384.ComputeHash(file);
                file.Close();
                file = new FileStream(fileName, FileMode.Open);
                byte[] sha512_out = sha512.ComputeHash(file);
                file.Close();

                sha[0] = BitConverter.ToString(sha1_out).Replace("-", "");
                sha[1] = BitConverter.ToString(sha256_out).Replace("-", "");
                sha[2] = BitConverter.ToString(sha384_out).Replace("-", "");
                sha[3] = BitConverter.ToString(sha512_out).Replace("-", "");
                return sha;

            }
            catch 
             { MessageBox.Show("校验失败"); return sha; }
              
        }

        } 
MySHA

 

转载于:https://www.cnblogs.com/xzhblogs/p/5799070.html

03-08
### 如何在C#中使用SHA1进行加密或哈希计算 #### SHA1简介 SHA1(Secure Hash Algorithm 1)是一种常见的哈希算法,能够将任意长度的数据转换成固定长度的哈希值。此过程不可逆,即从原始输入很难推导出对应的哈希值。 #### C#中的实现方式 为了利用SHA1执行哈希操作,在C#里可以借助于`System.Security.Cryptography`命名空间下的类库[^1]。下面给出一段简单的例子展示怎样创建字符串的SHA1散列: ```csharp using System; using System.Text; using System.Security.Cryptography; class Program { static void Main() { string originalString = "This is a test."; using (SHA1 sha1Hasher = SHA1.Create()) { // 创建一个新的SHA1对象实例 byte[] sourceBytes = Encoding.UTF8.GetBytes(originalString); // 将待处理的信息编码为字节数组 byte[] hashBytes = sha1Hasher.ComputeHash(sourceBytes); // 计算给定数据的哈希值 StringBuilder builder = new StringBuilder(); foreach(var b in hashBytes){ builder.Append(b.ToString("X2")); // 把每一个byte转化为两位十六进制数并追加到builder上 } Console.WriteLine($"Original String: {originalString}"); Console.WriteLine($"SHA1 Hash : {builder}"); // 输出最终得到的SHA1哈希串 } } } ``` 上述程序展示了如何通过调用`ComputeHash()`方法获取指定消息的SHA1摘要,并将其格式化为易于阅读的形式打印出来。值得注意的是,这里采用了UTF-8字符集来进行字符串至字节序列之间的转换;而在实际应用当中可能还需要考虑其他因素如性能优化等问题[^4]。 对于更复杂的应用场景比如密码保护,则建议采用更为安全的方式而非单纯依赖SHA1这样的单向散列函数,因为随着技术进步它已经被认为不够强壮了。不过了解其基本原理仍然有助于理解后续学习更强力的安全措施[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值