我想創建當前存盤在本地的檔案的校驗和。在檔案內容中,我需要對檔案正文進行校驗和,僅排除第一行和最后一行(頁眉和頁腳)。頁眉和頁腳總是以 >> 開頭
我目前已經在 c# 中實作了代碼來生成校驗和,但這會為所有檔案內容生成它。我目前有兩個選項,要么在 c# 代碼中生成它,要么在 Windows 上使用命令提示符生成它。
我當前的 C# 代碼如下所示:
string CalculateMD5(string fileLocation)
{
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(fileLocation))
{
var hash = md5.ComputeHash(stream);
return BitConverter.ToString(hash).Replace("-", "");
}
}
}
我也試過使用這個 cmd 命令:Certutil -hashfile filename.txt MD5
這再次為整個檔案生成 MD5 值,這不是所需的輸出。
ps 我確實嘗試使用 c# 洗掉第一行和最后一行,然后生成 md5 哈希,但是該值似乎與應有的不同。
歡迎任何和所有建議:)
謝謝
uj5u.com熱心網友回復:
只是快速地將一些東西放在一起,這樣的事情不會解決您的問題嗎?
private string CalculateMD5(string path) {
using var md5 = MD5.Create();
var txt = string.Join('\n', File.ReadAllLines(path)[1..^1]);
var hash = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(txt));
var result = BitConverter.ToString(hash).Replace("-", "");
return result;
}
加入 '\n' 以在將檔案作為行讀取時添加缺少的換行符,以避免丟失該資訊,范圍運算子是較新的 C# 功能,但如果您的解決方案需要它,可以輕松地以老式方式完成
uj5u.com熱心網友回復:
如果您使用的是受支持的 Windows 系統,則 PowerShell 已安裝且可用,除非您的組織已采取措施對其進行限制。
將 Get-Md5sum.bat 和 Get-Md5sum.ps1 這兩個檔案放入 PATH 變數中的同一目錄中。
在您的情況下,您將生成一個沒有頁眉/頁腳記錄的臨時檔案,然后在臨時檔案上運行 Get-Md5sum。
PS C:\src\t> Get-Content .\Get-Md5sum.bat
@powershell -NoLogo -NoProfile -Command "%~dp0Get-Md5sum.ps1 -Path "%~1""
PS C:\src\t> Get-Content .\Get-Md5sum.ps1
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true)]
[string]$Path
)
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
[System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($Path)))
PS C:\src\t> .\Get-Md5sum.bat "C:\src\t\test.txt"
FD-99-05-E1-CA-CE-FA-81-02-D1-C7-D3-35-19-E3-C3
PS C:\src\t> .\Get-Md5sum.ps1 -Path "C:\src\t\test.txt"
FD-99-05-E1-CA-CE-FA-81-02-D1-C7-D3-35-19-E3-C3
PS C:\src\t> .\Get-Md5sum.ps1 "C:\src\t\test.txt"
FD-99-05-E1-CA-CE-FA-81-02-D1-C7-D3-35-19-E3-C3
如果您愿意,結果可以洗掉 HYPHEN-MINUS 字符和/或轉換為小寫。
PS C:\src\t> (.\Get-Md5sum.ps1 -Path "C:\src\t\test.txt") -replace '-',''
FD9905E1CACEFA8102D1C7D33519E3C3
PS C:\src\t> (.\Get-Md5sum.ps1 -Path "C:\src\t\test.txt").ToLower()
fd-99-05-e1-ca-ce-fa-81-02-d1-c7-d3-35-19-e3-c3
PS C:\src\t> (.\Get-Md5sum.ps1 -Path "C:\src\t\test.txt").ToLower() -replace '-',''
fd9905e1cacefa8102d1c7d33519e3c3
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352977.html
