可以随意更改上次修改日期以尝试掩盖文件操作。请参阅 HeyScriptingGuy for an example。您可以用相当小的计算能力来散列文件。作为测试,我运行了以下内容:
生成 100 个文件,每个文件 10Mb。
Add-Type -AssemblyName System.Web
1..100 | %{
#get a random filename in the present working directory
$fn = [System.IO.Path]::Combine($pwd, [GUID]::NewGuid().ToString("N") + '.txt')
#set number of iterations
$count = 10mb/128
#create a filestream
$fs = New-Object System.IO.FileStream($fn,[System.IO.FileMode]::CreateNew)
#create a streamwriter
$sw = New-Object System.IO.StreamWriter($fs,[System.Text.Encoding]::ASCII,128)
do{
#Write the chars plus eol
$sw.WriteLine([System.Web.Security.Membership]::GeneratePassword(126,0))
#decrement the counter
$count--
}while($count -gt 0)
#close the streamwriter
$sw.Close()
#close the filestream
$fs.Close()
}
创建一个受支持算法的数组。这是为PSv4, v5, v5.1、v6 丢弃 MACTripleDES 和 RipeMD160
$algorithms = @('MACTripleDES','MD5','RIPEMD160','SHA1','SHA256','SHA384','SHA512')
每种算法将所有文件哈希 10 次,然后取平均值。
foreach($algorithm in $algorithms) {
$totalTime = 0
1..10 | ForEach-Object {
$totalTime += measure-command {dir | Get-FileHash -Algorithm $algorithm} | Select-Object -ExpandProperty TotalSeconds
}
[PSCustomObject]@{
Algorithm = $algorithm
AverageTime = $totaltime/10
}
}
100 个 10Mb 文件的结果
Algorithm AverageTime
--------- -----------
MACTripleDES 42.44803523
MD5 3.50319849
RIPEMD160 9.58865946
SHA1 3.94368417
SHA256 7.72123966
SHA384 5.61478894
SHA512 5.62492335
10 个 100Mb 文件的结果
Algorithm AverageTime
--------- -----------
MACTripleDES 43.82652673
MD5 3.40958188
RIPEMD160 9.25260835
SHA1 3.74736209
SHA256 7.19778535
SHA384 5.17364897
SHA512 5.17803741
我建议在您的系统上运行类似的基准测试,看看会产生什么影响。同样来自文档:“出于安全原因,不再被认为是安全的 MD5 和 SHA1 应仅用于简单的更改验证,不应用于为需要保护免受攻击或篡改的文件生成哈希值。”