รับ FileHash (Microsoft.PowerShell.Utility)
Get-FileHash
- โมดูล :
- Microsoft.PowerShell.Utility
คำนวณค่าแฮชสำหรับไฟล์โดยใช้อัลกอริทึมแฮชที่ระบุ
ไวยากรณ์
Get-FileHash
[-Path] <String[]>
[[-Algorithm] <String>]
[<CommonParameters>]Get-FileHash
[-LiteralPath] <String[]>
[[-Algorithm] <String>]
[<CommonParameters>]Get-FileHash
[-InputStream] <Stream>
[[-Algorithm] <String>]
[<CommonParameters>]คำอธิบาย
cmdlet Get-FileHash คำนวณค่าแฮชสำหรับไฟล์โดยใช้อัลกอริทึมแฮชที่ระบุ ค่าแฮชเป็นค่าเฉพาะที่สอดคล้องกับเนื้อหาของไฟล์ แทนที่จะระบุเนื้อหาของไฟล์ด้วยชื่อไฟล์ นามสกุล หรือการกำหนดอื่นๆ แฮชจะกำหนดค่าเฉพาะให้กับเนื้อหาของไฟล์ ชื่อไฟล์และนามสกุลสามารถเปลี่ยนแปลงได้โดยไม่ต้องแก้ไขเนื้อหาของไฟล์ และไม่ต้องเปลี่ยนค่าแฮช ในทำนองเดียวกัน เนื้อหาของไฟล์สามารถเปลี่ยนแปลงได้โดยไม่ต้องเปลี่ยนชื่อหรือนามสกุล อย่างไรก็ตาม การเปลี่ยนแปลงแม้แต่อักขระเดียวในเนื้อหาของไฟล์จะเปลี่ยนค่าแฮชของไฟล์
วัตถุประสงค์ของค่าแฮชคือเพื่อให้มีวิธีที่ปลอดภัยในการเข้ารหัสเพื่อตรวจสอบว่าเนื้อหาของไฟล์ไม่มีการเปลี่ยนแปลง แม้ว่าอัลกอริธึมแฮชบางตัว รวมถึง MD5 และ SHA1 จะไม่ถือว่าปลอดภัยจากการโจมตีอีกต่อไป แต่เป้าหมายของอัลกอริธึมแฮชที่ปลอดภัยคือการทำให้ไม่สามารถเปลี่ยนแปลงเนื้อหาของไฟล์ได้ ไม่ว่าจะโดยบังเอิญ หรือโดยความพยายามที่เป็นอันตรายหรือไม่ได้รับอนุญาต - - และคงค่าแฮชไว้เท่าเดิม คุณยังสามารถใช้ค่าแฮชเพื่อพิจารณาว่าไฟล์สองไฟล์ที่มีเนื้อหาเหมือนกันทุกประการหรือไม่ หากค่าแฮชของสองไฟล์เหมือนกัน เนื้อหาของไฟล์ก็จะเหมือนกันด้วย
ตามค่าเริ่มต้น cmdlet Get-FileHash จะใช้อัลกอริทึม SHA256 แม้ว่าจะสามารถใช้อัลกอริทึมแฮชใดๆ ที่ได้รับการสนับสนุนโดยระบบปฏิบัติการเป้าหมายก็ตาม
ตัวอย่าง
ตัวอย่างที่ 1: คำนวณค่าแฮชสำหรับไฟล์
ตัวอย่างนี้ใช้ Get-FileHash cmdlet เพื่อคำนวณค่าแฮชสำหรับไฟล์ /etc/apt/sources.list อัลกอริธึมแฮชที่ใช้เป็นค่าเริ่มต้น SHA256 เอาต์พุตถูกส่งไปยัง Format-List cmdlet เพื่อจัดรูปแบบเอาต์พุตเป็นรายการ
Get-FileHash /etc/apt/sources.list | Format-List
Algorithm : SHA256
Hash : 3CBCFDDEC145E3382D592266BE193E5BE53443138EE6AB6CA09FF20DF609E268
Path : /etc/apt/sources.listตัวอย่างที่ 2: คำนวณค่าแฮชสำหรับไฟล์ ISO
ตัวอย่างนี้ใช้ Get-FileHash cmdlet และอัลกอริทึม SHA384 เพื่อคำนวณค่าแฮชสำหรับไฟล์ ISO ที่ผู้ดูแลระบบดาวน์โหลดจากอินเทอร์เน็ต เอาต์พุตถูกส่งไปยัง Format-List cmdlet เพื่อจัดรูปแบบเอาต์พุตเป็นรายการ
Get-FileHash C:\Users\user1\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List
Algorithm : SHA384
Hash : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path : C:\Users\user1\Downloads\Contoso8_1_ENT.isoตัวอย่างที่ 3: คำนวณค่าแฮชของสตรีม
สำหรับตัวอย่างนี้ เราได้รับการใช้ System.Net.WebClient เพื่อดาวน์โหลดแพ็คเกจจากหน้าเผยแพร่ Powershell หน้าเผยแพร่ยังบันทึกแฮช SHA256 ของไฟล์แพ็กเกจแต่ละไฟล์ด้วย เราสามารถเปรียบเทียบค่าแฮชที่เผยแพร่กับค่าที่เราคำนวณด้วย Get-FileHash
$wc = [System.Net.WebClient]::new()
$pkgurl = 'https://github.com/PowerShell/PowerShell/releases/download/v6.2.4/powershell_6.2.4-1.debian.9_amd64.deb'
$publishedHash = '8E28E54D601F0751922DE24632C1E716B4684876255CF82304A9B19E89A9CCAC'
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash
Trueตัวอย่างที่ 4: คำนวณแฮชของสตริง
PowerShell ไม่มี cmdlet เพื่อคำนวณแฮชของสตริง อย่างไรก็ตาม คุณสามารถเขียนสตริงลงในสตรีมและใช้พารามิเตอร์ InputStream ของ Get-FileHash เพื่อรับค่าแฮช
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("Hello world")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream | Select-Object Hash
Hash
----
64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3Cพารามิเตอร์
-Algorithm
ระบุฟังก์ชันแฮชการเข้ารหัสเพื่อใช้ในการคำนวณค่าแฮชของเนื้อหาของไฟล์หรือสตรีมที่ระบุ ฟังก์ชันแฮชสำหรับการเข้ารหัสมีคุณสมบัติที่ไม่สามารถค้นหาไฟล์สองไฟล์ที่แตกต่างกันที่มีค่าแฮชเดียวกันได้ ฟังก์ชันแฮชมักใช้กับลายเซ็นดิจิทัลและเพื่อความสมบูรณ์ของข้อมูล ค่าที่ยอมรับได้สำหรับพารามิเตอร์นี้คือ:
- SHA1
- SHA256
- SHA384
- SHA512
- เอ็มดี5
หากไม่มีการระบุค่า หรือหากละเว้นพารามิเตอร์ ค่าเริ่มต้นคือ SHA256
ด้วยเหตุผลด้านความปลอดภัย MD5 และ SHA1 ซึ่งไม่ถือว่าปลอดภัยอีกต่อไป ควรใช้สำหรับการตรวจสอบการเปลี่ยนแปลงอย่างง่ายเท่านั้น และไม่ควรใช้เพื่อสร้างค่าแฮชสำหรับไฟล์ที่ต้องการการป้องกันจากการโจมตีหรือการปลอมแปลง
- พิมพ์ :
String
- ค่าที่ยอมรับ:
SHA1, SHA256, SHA384, SHA512, MD5
- ตำแหน่ง:
1
- ค่าเริ่มต้น:
SHA256
- ที่จำเป็น:
-
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-InputStream
ระบุสตรีมอินพุต
- พิมพ์ :
ลำธาร
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-LiteralPath
ระบุเส้นทางไปยังไฟล์ ต่างจากพารามิเตอร์ Path ค่าของพารามิเตอร์ LiteralPath จะถูกใช้เหมือนกับที่พิมพ์ทุกประการ ไม่มีอักขระใดที่ถูกตีความว่าเป็นอักขระตัวแทน หากเส้นทางมีอักขระเลี่ยง ให้ปิดเส้นทางด้วยเครื่องหมายคำพูดเดี่ยว เครื่องหมายคำพูดเดี่ยวสั่งให้ PowerShell ไม่ตีความอักขระเป็นลำดับหลีก
- พิมพ์ :
String[]
- นามแฝง :
PSPath, LP
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
False
-Path
ระบุเส้นทางไปยังไฟล์ตั้งแต่หนึ่งไฟล์ขึ้นไปเป็นอาร์เรย์ อนุญาตให้ใช้อักขระตัวแทนได้
- พิมพ์ :
String[]
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
True
อินพุต
สตริง
คุณสามารถไปป์สตริงที่มีเส้นทางไปยังไฟล์ไปยัง cmdlet นี้
เอาท์พุต
Microsoft.PowerShell.Utility.FileHash
cmdlet นี้ส่งคืนวัตถุที่แสดงเส้นทางไปยังไฟล์ที่ระบุ ค่าของแฮชที่คำนวณ และอัลกอริทึมที่ใช้ในการคำนวณแฮช