【发布时间】:2015-08-20 20:10:21
【问题描述】:
我正在编写一个计算程序的 MD5/SHA256 的代码,稍后我希望能够更改它。
我写了计算MD5/SHA256的代码,即:
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(textBox1.Text))
{
MessageBox.Show(BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", ""));
}
}
using (var sha256 = SHA256.Create())
{
using (var stream = File.OpenRead(textBox1.Text))
{
MessageBox.Show(BitConverter.ToString(sha256.ComputeHash(stream)).Replace("-", ""));
}
}
接下来我希望能够更改指定文件的 MD5/SHA256 的值。我已经搜索过,我发现的只是这个类:
class FileUtils
{
#region VARIABLES
private const int OFFSET_CHECKSUM = 0x12;
#endregion
#region METHODS
public static ushort GetCheckSum(string fileName)
{
if (!File.Exists(fileName))
throw new FileNotFoundException("Invalid fileName");
return GetCheckSum(File.ReadAllBytes(fileName));
}
public static ushort GetCheckSum(byte[] fileData)
{
if (fileData.Length < OFFSET_CHECKSUM + 1)
throw new ArgumentException("Invalid fileData");
return BitConverter.ToUInt16(fileData, OFFSET_CHECKSUM);
}
public static void WriteCheckSum(string sourceFile, string destFile, ushort checkSum)
{
if (!File.Exists(sourceFile))
throw new FileNotFoundException("Invalid fileName");
WriteCheckSum(File.ReadAllBytes(sourceFile), destFile, checkSum);
}
public static void WriteCheckSum(byte[] data, string destFile, ushort checkSum)
{
byte[] checkSumData = BitConverter.GetBytes(checkSum);
checkSumData.CopyTo(data, OFFSET_CHECKSUM);
File.WriteAllBytes(destFile, data);
}
#endregion
}
我不太了解它是如何工作的,只更改了 MD5。对于不那么高级的用户,有没有更简单的方法来做到这一点?如果这个类可以满足我的需要,有人可以向我解释如何使用它吗?
编辑:我知道文件的 MD5 不能更改,我的目标不是更改实际文件的 MD5,我想在文件中添加一些内容来更改 MD5 并通过这样做我希望文件的功能保持不变。
【问题讨论】:
-
要更改文件的哈希值,只需更改文件即可。
-
或许您可以告诉我们为什么您想这样做?你到底想达到什么目的?
-
@dandan78 我想更改a文件的MD5/SHA256,所以不一样(重复)。
-
@user5204184 人们试图告诉您您的要求没有意义。散列通常用于确定 a) 两条数据是否相同或 b) 自上次创建散列以来,一条数据已更改。抵消散列没有意义。虽然仍然会给出 b),但不会给出 a)。那么:为什么如果它破坏而不是帮助,你需要这个?
-
@user5204184 这没有任何意义。也许你应该告诉我们你真正的问题是什么,而不是一开始就遵循有缺陷的方法。