积极答复者
C# 如何比较两个文件内容一样?(也就是内容完全一样,但文件名不一定相同)

问题
-
1 就是如何用程序判别出两张图片文件一模一样?如果一样就返回一个false ,不一样就返回一个true
(我的图片是一些Excel表格和数据。只比较大小这不行,因为这大小基本是一样,这些表格和数据是很规范的,它们的字节数是差不了多少的)说下思路也行,我比不出来,不知道怎么入手,请大家帮帮我,先谢谢大家了,其实我就是想实现排重功能。
2 http://www.weather.com.cn/html/weather/101010100.shtml 我在做抓取网页信息入本地数据库时,发现
那个湿度和风速(这个数值在一张图片) 我提取不到 我怎么做才能取出来呢?(我查看它的源码,它在一个外部JS文件中)
这正则能取出来吗?要是不用正则那怎么做呢?我都不知怎么入手。。。。。。。。。
- 已移动 Sheng Jiang 蒋晟Moderator 2009年3月24日 15:51 软件设计问题 (从 Visual C# 移动到 .NET Framework 一般性问题讨论区)
答案
-
sainaxingxing 说:
MD5? 没听懂,楼上的朋友能具体点吗?呵呵。
晕,md5你不会没听说过吧(外星来人?没下载过电影吗),进行二个文件比较,看是否一样,最直接的方法就是二进制比较,md5是二进制比较的一种,会得到一个32位的字符串,如果2个文件即使有再小的差别,得到的md5会完全不一样,所以只要2个文件md5是一样的,2个文件就完全一样。你直接进行二进制比较也可以,这样更麻烦,因为.net里有专门处理md5的类,几行代码就能比较2个文件是否一样,看这里
更新:2007 年 11 月表示 MD5 哈希算法的所有实现均从中继承的抽象类。
命名空间: System.Security.Cryptography
程序集: mscorlib(在 mscorlib.dll 中)语法
Visual Basic(声明)
<ComVisibleAttribute(True)> _
Public MustInherit Class MD5 _
Inherits HashAlgorithm
Visual Basic (用法)
Dim instance As MD5
C#
[ComVisibleAttribute(true)]
public abstract class MD5 : HashAlgorithm
Visual C++
[ComVisibleAttribute(true)]
public ref class MD5 abstract : public HashAlgorithm
J#
/** @attribute ComVisibleAttribute(true) */
public abstract class MD5 extends HashAlgorithm
JScript
public abstract class MD5 extends HashAlgorithm
备注
哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串。加密哈希函数有这样一个属性:在计算上不大可能找到散列为相同的值的两个不同的输入;也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配。数据的少量更改会在哈希值中产生不可预知的大量更改。MD5 算法的哈希值大小为 128 位。
MD5 类的 ComputeHash 方法将哈希作为 16 字节的数组返回。请注意,某些 MD5 实现会生成 32 字符的十六进制格式哈希。若要与此类实现进行互操作,请将 ComputeHash 方法的返回值格式化为十六进制值。
示例
下面的代码示例计算字符串的 MD5 哈希值,并将该哈希作为 32 字符的十六进制格式字符串返回。此代码示例中创建的哈希字符串与能创建 32 字符的十六进制格式哈希字符串的任何 MD5 哈希函数(在任何平台上)兼容。Visual Basic 复制代码
Imports System
Imports System.Security.Cryptography
Imports System.TextModule Example
' Hash an input string and return the hash as
' a 32 character hexadecimal string.
Function getMd5Hash(ByVal input As String) As String
' Create a new instance of the MD5 object.
Dim md5Hasher As MD5 = MD5.Create()' Convert the input string to a byte array and compute the hash.
Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input))' Create a new Stringbuilder to collect the bytes
' and create a string.
Dim sBuilder As New StringBuilder()' Loop through each byte of the hashed data
' and format each one as a hexadecimal string.
Dim i As Integer
For i = 0 To data.Length - 1
sBuilder.Append(data(i).ToString("x2"))
Next i' Return the hexadecimal string.
Return sBuilder.ToString()End Function
' Verify a hash against a string.
Function verifyMd5Hash(ByVal input As String, ByVal hash As String) As Boolean
' Hash the input.
Dim hashOfInput As String = getMd5Hash(input)' Create a StringComparer an comare the hashes.
Dim comparer As StringComparer = StringComparer.OrdinalIgnoreCaseIf 0 = comparer.Compare(hashOfInput, hash) Then
Return True
Else
Return False
End IfEnd Function
Sub Main()
Dim source As String = "Hello World!"Dim hash As String = getMd5Hash(source)
Console.WriteLine("The MD5 hash of " + source + " is: " + hash + ".")
Console.WriteLine("Verifying the hash...")
If verifyMd5Hash(source, hash) Then
Console.WriteLine("The hashes are the same.")
Else
Console.WriteLine("The hashes are not same.")
End IfEnd Sub
End Module
' This code example produces the following output:
'
' The MD5 hash of Hello World! is: ed076287532e86365e841e92bfc50d8c.
' Verifying the hash...
' The hashes are the same.
C# 复制代码
using System;
using System.Security.Cryptography;
using System.Text;class Example
{
// Hash an input string and return the hash as
// a 32 character hexadecimal string.
static string getMd5Hash(string input)
{
// Create a new instance of the MD5CryptoServiceProvider object.
MD5 md5Hasher = MD5.Create();// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}// Return the hexadecimal string.
return sBuilder.ToString();
}// Verify a hash against a string.
static bool verifyMd5Hash(string input, string hash)
{
// Hash the input.
string hashOfInput = getMd5Hash(input);// Create a StringComparer an comare the hashes.
StringComparer comparer = StringComparer.OrdinalIgnoreCase;if (0 == comparer.Compare(hashOfInput, hash))
{
return true;
}
else
{
return false;
}
}
static void Main()
{
string source = "Hello World!";string hash = getMd5Hash(source);
Console.WriteLine("The MD5 hash of " + source + " is: " + hash + ".");
Console.WriteLine("Verifying the hash...");
if (verifyMd5Hash(source, hash))
{
Console.WriteLine("The hashes are the same.");
}
else
{
Console.WriteLine("The hashes are not same.");
}}
}
// This code example produces the following output:
//
// The MD5 hash of Hello World! is: ed076287532e86365e841e92bfc50d8c.
// Verifying the hash...
// The hashes are the same.
继承层次结构
System..::.Object
System.Security.Cryptography..::.HashAlgorithm
System.Security.Cryptography..::.MD5
System.Security.Cryptography..::.MD5Cng
System.Security.Cryptography..::.MD5CryptoServiceProvider线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
平台
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC
.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。版本信息
.NET Framework
受以下版本支持:3.5、3.0、2.0、1.1、1.0.NET Compact Framework
受以下版本支持:3.5、2.0另请参见
参考
MD5 成员
System.Security.Cryptography 命名空间
其他资源
加密服务
- 已标记为答案 韦恩卑鄙 waywaModerator 2009年6月10日 3:39
全部回复
-
-
sainaxingxing 说:
MD5? 没听懂,楼上的朋友能具体点吗?呵呵。
晕,md5你不会没听说过吧(外星来人?没下载过电影吗),进行二个文件比较,看是否一样,最直接的方法就是二进制比较,md5是二进制比较的一种,会得到一个32位的字符串,如果2个文件即使有再小的差别,得到的md5会完全不一样,所以只要2个文件md5是一样的,2个文件就完全一样。你直接进行二进制比较也可以,这样更麻烦,因为.net里有专门处理md5的类,几行代码就能比较2个文件是否一样,看这里
更新:2007 年 11 月表示 MD5 哈希算法的所有实现均从中继承的抽象类。
命名空间: System.Security.Cryptography
程序集: mscorlib(在 mscorlib.dll 中)语法
Visual Basic(声明)
<ComVisibleAttribute(True)> _
Public MustInherit Class MD5 _
Inherits HashAlgorithm
Visual Basic (用法)
Dim instance As MD5
C#
[ComVisibleAttribute(true)]
public abstract class MD5 : HashAlgorithm
Visual C++
[ComVisibleAttribute(true)]
public ref class MD5 abstract : public HashAlgorithm
J#
/** @attribute ComVisibleAttribute(true) */
public abstract class MD5 extends HashAlgorithm
JScript
public abstract class MD5 extends HashAlgorithm
备注
哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串。加密哈希函数有这样一个属性:在计算上不大可能找到散列为相同的值的两个不同的输入;也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配。数据的少量更改会在哈希值中产生不可预知的大量更改。MD5 算法的哈希值大小为 128 位。
MD5 类的 ComputeHash 方法将哈希作为 16 字节的数组返回。请注意,某些 MD5 实现会生成 32 字符的十六进制格式哈希。若要与此类实现进行互操作,请将 ComputeHash 方法的返回值格式化为十六进制值。
示例
下面的代码示例计算字符串的 MD5 哈希值,并将该哈希作为 32 字符的十六进制格式字符串返回。此代码示例中创建的哈希字符串与能创建 32 字符的十六进制格式哈希字符串的任何 MD5 哈希函数(在任何平台上)兼容。Visual Basic 复制代码
Imports System
Imports System.Security.Cryptography
Imports System.TextModule Example
' Hash an input string and return the hash as
' a 32 character hexadecimal string.
Function getMd5Hash(ByVal input As String) As String
' Create a new instance of the MD5 object.
Dim md5Hasher As MD5 = MD5.Create()' Convert the input string to a byte array and compute the hash.
Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input))' Create a new Stringbuilder to collect the bytes
' and create a string.
Dim sBuilder As New StringBuilder()' Loop through each byte of the hashed data
' and format each one as a hexadecimal string.
Dim i As Integer
For i = 0 To data.Length - 1
sBuilder.Append(data(i).ToString("x2"))
Next i' Return the hexadecimal string.
Return sBuilder.ToString()End Function
' Verify a hash against a string.
Function verifyMd5Hash(ByVal input As String, ByVal hash As String) As Boolean
' Hash the input.
Dim hashOfInput As String = getMd5Hash(input)' Create a StringComparer an comare the hashes.
Dim comparer As StringComparer = StringComparer.OrdinalIgnoreCaseIf 0 = comparer.Compare(hashOfInput, hash) Then
Return True
Else
Return False
End IfEnd Function
Sub Main()
Dim source As String = "Hello World!"Dim hash As String = getMd5Hash(source)
Console.WriteLine("The MD5 hash of " + source + " is: " + hash + ".")
Console.WriteLine("Verifying the hash...")
If verifyMd5Hash(source, hash) Then
Console.WriteLine("The hashes are the same.")
Else
Console.WriteLine("The hashes are not same.")
End IfEnd Sub
End Module
' This code example produces the following output:
'
' The MD5 hash of Hello World! is: ed076287532e86365e841e92bfc50d8c.
' Verifying the hash...
' The hashes are the same.
C# 复制代码
using System;
using System.Security.Cryptography;
using System.Text;class Example
{
// Hash an input string and return the hash as
// a 32 character hexadecimal string.
static string getMd5Hash(string input)
{
// Create a new instance of the MD5CryptoServiceProvider object.
MD5 md5Hasher = MD5.Create();// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}// Return the hexadecimal string.
return sBuilder.ToString();
}// Verify a hash against a string.
static bool verifyMd5Hash(string input, string hash)
{
// Hash the input.
string hashOfInput = getMd5Hash(input);// Create a StringComparer an comare the hashes.
StringComparer comparer = StringComparer.OrdinalIgnoreCase;if (0 == comparer.Compare(hashOfInput, hash))
{
return true;
}
else
{
return false;
}
}
static void Main()
{
string source = "Hello World!";string hash = getMd5Hash(source);
Console.WriteLine("The MD5 hash of " + source + " is: " + hash + ".");
Console.WriteLine("Verifying the hash...");
if (verifyMd5Hash(source, hash))
{
Console.WriteLine("The hashes are the same.");
}
else
{
Console.WriteLine("The hashes are not same.");
}}
}
// This code example produces the following output:
//
// The MD5 hash of Hello World! is: ed076287532e86365e841e92bfc50d8c.
// Verifying the hash...
// The hashes are the same.
继承层次结构
System..::.Object
System.Security.Cryptography..::.HashAlgorithm
System.Security.Cryptography..::.MD5
System.Security.Cryptography..::.MD5Cng
System.Security.Cryptography..::.MD5CryptoServiceProvider线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
平台
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC
.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。版本信息
.NET Framework
受以下版本支持:3.5、3.0、2.0、1.1、1.0.NET Compact Framework
受以下版本支持:3.5、2.0另请参见
参考
MD5 成员
System.Security.Cryptography 命名空间
其他资源
加密服务
- 已标记为答案 韦恩卑鄙 waywaModerator 2009年6月10日 3:39