C#アプリケーションに実装されたハッシュ

C#では、MD5またはSHA1の方法、MD5及びSHA1ハッシュデータがハッシュアルゴリズムである、MD5は、128ビットの出力であり、出力が速くより160ビットSHA1、MD5、SHA1、MD5 SHA1よりも高強度です。

1.1 SHA-1およびMD5比較

MD4、SHA-1によって誘導され、MD5は互いに非常に類似しているので、両方。したがって、彼らの強さとその他の特性も似ていますが、異なる以下があります。

  • セキュリティフォース攻撃:最も重要かつ最も重要な違いは、SHA-1ダイジェストMD5は32よりも長いダイジェストということです。SHA-1は、2 ^ 160の操作の順序であるが、任意の所与のメッセージは、2 ^ 128の動作のための等しい困難MD5ダイジェストを消化するように力、パケットを用いる技術。したがって、SHA-1力の対とは、高い強度を攻撃します。
  • 暗号解読の安全性:により暗号解読攻撃に対して脆弱MD5の設計に、SHA-1は、このような攻撃に対してより脆弱であることが表示されます。
  • スピード:MD5よりも遅く、同じハードウェア上で、SHA-1動作速度。
1.2 SHA-1およびMD5は、C#で実装されています
/// <summary>
/// Hash辅助类
/// </summary>
public class HashHelper
{
    /// <summary>
    /// 计算文件的 MD5 值
    /// </summary>
    /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
    /// <returns>MD5 值16进制字符串</returns>
    public static string MD5File(string fileName)
    {
        return HashFile(fileName, "md5");
    }

    /// <summary>
    /// 计算文件的 sha1 值
    /// </summary>
    /// <param name="fileName">要计算 sha1 值的文件名和路径</param>
    /// <returns>sha1 值16进制字符串</returns>
    public static string SHA1File(string fileName)
    {
        return HashFile(fileName, "sha1");
    }

    /// <summary>
    /// 计算文件的哈希值
    /// </summary>
    /// <param name="fileName">要计算哈希值的文件名和路径</param>
    /// <param name="algName">算法:sha1,md5</param>
    /// <returns>哈希值16进制字符串</returns>
    private static string HashFile(string fileName, string algName)
    {
        if (!System.IO.File.Exists(fileName))
        {
            return string.Empty;
        }

        System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
        byte[] hashBytes = HashData(fs, algName);
        fs.Close();
        return ByteArrayToHexString(hashBytes);
    }

    /// <summary>
    /// 计算哈希值
    /// </summary>
    /// <param name="stream">要计算哈希值的 Stream</param>
    /// <param name="algName">算法:sha1,md5</param>
    /// <returns>哈希值字节数组</returns>
    private static byte[] HashData(System.IO.Stream stream, string algName)
    {
        System.Security.Cryptography.HashAlgorithm algorithm;
        if (algName == null)
        {
            throw new ArgumentNullException("algName 不能为 null");
        }

        if (string.Compare(algName, "sha1", true) == 0)
        {
            algorithm = System.Security.Cryptography.SHA1.Create();
        }
        else
        {
            if (string.Compare(algName, "md5", true) != 0)
            {
                throw new Exception("algName 只能使用 sha1 或 md5");
            }
            algorithm = System.Security.Cryptography.MD5.Create();
        }

        return algorithm.ComputeHash(stream);
    }

    /// <summary>
    /// 字节数组转换为16进制表示的字符串
    /// </summary>
    private static string ByteArrayToHexString(byte[] buf)
    {
        return BitConverter.ToString(buf).Replace("-", "");
    }
}
C#のテストケースに実装1.3SHA-1およびMD5
[TestClass]
public class HashHelperUnitTest
{
    [TestMethod]
    public void TestMethod1()
    {
        string fileName = @"D:\TempTest\RDIFramework.BizLogic.dll";
        Assert.AreEqual(0, 0);

        //01.计算文件的 MD5 值
        Console.WriteLine(string.Format("计算文件的 MD5 值:{0}", HashHelper.MD5File(fileName)));

        //02.计算文件的 sha1 值
        Console.WriteLine(string.Format("计算文件的 sha1 值:{0}", HashHelper.SHA1File(fileName)));
    }
}

おすすめ

転載: www.cnblogs.com/kadycui/p/11428827.html