ค้นหาเว็บไซต์

รับ 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 นี้ส่งคืนวัตถุที่แสดงเส้นทางไปยังไฟล์ที่ระบุ ค่าของแฮชที่คำนวณ และอัลกอริทึมที่ใช้ในการคำนวณแฮช

บทความที่เกี่ยวข้อง