C# - 从自身计算 md5 以检查文件未被修改
C# - Calculate md5 from self to check that file is not modified
我想确认我的程序没有被修改(破解)。
所以我想让程序从自己的 exe 中计算 md5 并进行比较。
if(GetMD5FromSelf() != "hash")
Application.Exit(); //modified so exit
但是当我将哈希值放入字符串时,文件的 md5 会发生变化。
有什么办法吗?
这些是您可以做到的一些方法,
选项 1
您可以在线存储散列,这可能更安全,因为如果有人要更改您的程序,他们也可以更改散列。
选项 2
您可以在应用程序的末尾添加 4 个字节和一个字符串并将校验和保存在那里,注意不要将这些包含在您的校验和中并且只验证您自己的文件大小,而不是 4 个字节和字符串。
代码片段
List<byte> total = new List<byte>(File.ReadAllBytes(System.Reflection.Assembly.GetEntryAssembly().Location));
byte[] totalByteArray = total.ToArray();
int OwnSize = 115200;//Size of you exe file without checksum
int Md5Length = BitConverter.ToInt32(totalByteArray, OwnSize+4);
string NormalFileNameString = Encoding.ASCII.GetString(totalByteArray, OwnSize, Md5Length);
我想确认我的程序没有被修改(破解)。
所以我想让程序从自己的 exe 中计算 md5 并进行比较。
if(GetMD5FromSelf() != "hash")
Application.Exit(); //modified so exit
但是当我将哈希值放入字符串时,文件的 md5 会发生变化。
有什么办法吗?
这些是您可以做到的一些方法,
选项 1
您可以在线存储散列,这可能更安全,因为如果有人要更改您的程序,他们也可以更改散列。
选项 2
您可以在应用程序的末尾添加 4 个字节和一个字符串并将校验和保存在那里,注意不要将这些包含在您的校验和中并且只验证您自己的文件大小,而不是 4 个字节和字符串。
代码片段
List<byte> total = new List<byte>(File.ReadAllBytes(System.Reflection.Assembly.GetEntryAssembly().Location));
byte[] totalByteArray = total.ToArray();
int OwnSize = 115200;//Size of you exe file without checksum
int Md5Length = BitConverter.ToInt32(totalByteArray, OwnSize+4);
string NormalFileNameString = Encoding.ASCII.GetString(totalByteArray, OwnSize, Md5Length);