เครื่องสร้าง Hash SHA-1
สร้าง hash SHA-1 จากข้อความใด ๆ
ข้อความป้อนเข้า
Hash SHA-1
Hash SHA-1 จะแสดงที่นี่…
SHA-1 Hashing คืออะไร?
SHA-1 (Secure Hash Algorithm 1) เป็นฟังก์ชันแฮชเข้ารหัสลับที่สร้าง digest ขนาด 160 บิต (20 ไบต์) จากข้อมูลอินพุตใด ๆ เผยแพร่โดย NSA และได้รับการกำหนดมาตรฐานโดย NIST ในปี 1995 ในรูป FIPS PUB 180-1 และต่อมาได้รับการบันทึกใน RFC 3174 โดย SHA-1 ถูกออกแบบมาเพื่อเป็นตัวสืบทอดที่แข็งแกร่งกว่า SHA-0 และ MD5 อัลกอริทึมประมวลผลข้อมูลอินพุตในบล็อกขนาด 512 บิต ผ่าน 80 รอบของการดำเนินการระดับบิต โดยสร้างลายนิ้วมือเลขฐานสิบหก 40 ตัวอักษร ซึ่งเคยเป็นรากฐานของ SSL/TLS, PGP, SSH และ IPsec มานานกว่าทศวรรษ
เช่นเดียวกับฟังก์ชันแฮชเข้ารหัสลับทุกชนิด SHA-1 เป็นการแปลงทางเดียว: การคำนวณแฮชจากอินพุตนั้นรวดเร็ว แต่การกู้คืนอินพุตจากแฮชเพียงอย่างเดียวนั้นไม่สามารถทำได้จริงในเชิงคำนวณ การเปลี่ยนแปลงเพียงหนึ่งบิตในอินพุตจะทำให้ digest ขนาด 160 บิตเปลี่ยนแปลงไปอย่างสิ้นเชิง ซึ่งเป็นคุณสมบัติที่เรียกว่า avalanche effect SHA-1 แมปช่องอินพุตขนาดใหญ่ตามอำเภอใจไปยังเอาต์พุตขนาด 160 บิตคงที่ ซึ่งหมายความว่าการชน (collision) ระหว่างสองอินพุตที่แตกต่างกันซึ่งสร้างแฮชเดียวกันนั้นต้องมีอยู่จริงในเชิงคณิตศาสตร์ ข้อกำหนดด้านความปลอดภัยของฟังก์ชันแฮชคือการค้นหา collision ดังกล่าวควรต้องใช้การดำเนินการประมาณ 2^80 ครั้ง ซึ่งเท่ากับครึ่งหนึ่งของความยาวบิตเอาต์พุต
ในปี 2017 Google และ CWI Amsterdam ได้เผยแพร่การโจมตี SHAttered โดยแสดงให้เห็นการชน SHA-1 ครั้งแรกในทางปฏิบัติ ด้วยการสร้างไฟล์ PDF สองไฟล์ที่แตกต่างกันแต่มี digest เดียวกัน การโจมตีนี้ต้องใช้การคำนวณ SHA-1 ประมาณ 2^63.1 ครั้ง ซึ่งต่ำกว่าขีดจำกัดทางทฤษฎีที่ 2^80 มาก ในปี 2020 Gaetan Leurent และ Thomas Peyrin ได้ลดต้นทุนลงอีกด้วยการโจมตี chosen-prefix collision ที่ต้องใช้การดำเนินการประมาณ 2^63.4 ครั้ง ผลที่ตามมาคือเบราว์เซอร์หลัก หน่วยงานออกใบรับรอง และองค์กรมาตรฐานต่าง ๆ ได้ยกเลิกการใช้ SHA-1 สำหรับลายเซ็นดิจิทัลและใบรับรอง TLS อย่างไรก็ตาม SHA-1 ยังคงใช้งานอยู่สำหรับวัตถุประสงค์ที่ไม่ใช่ด้านความปลอดภัย ได้แก่ ID อ็อบเจกต์ใน Git (แม้ว่า Git กำลังย้ายไปใช้ SHA-256), โครงสร้าง HMAC รุ่นเก่า และการตรวจสอบความสมบูรณ์ของไฟล์ที่ไม่ต้องการความทนทานต่อการชนแบบปฏิปักษ์
ทำไมต้องใช้เครื่องมือสร้าง SHA-1 นี้?
สร้างแฮช SHA-1 ได้ทันทีโดยไม่ต้องติดตั้งอะไรหรือเขียนโค้ด วางข้อความของคุณแล้วรับ hex digest 40 ตัวอักษรแบบเรียลไทม์ — มีประโยชน์สำหรับการตรวจสอบ checksum รุ่นเก่า, การดีบัก Git internals หรือการทดสอบเวิร์กโฟลว์ที่ใช้แฮช
กรณีการใช้งาน SHA-1
SHA-1 เทียบกับอัลกอริทึมแฮชอื่น ๆ
SHA-1 สร้าง digest ขนาด 160 บิต — ยาวกว่า MD5 (128 บิต) แต่สั้นกว่าอัลกอริทึมในตระกูล SHA-2 อย่างมีนัยสำคัญ ตารางด้านล่างเปรียบเทียบขนาด digest, มาตรฐาน และกรณีการใช้งานที่เหมาะสมสำหรับแต่ละอัลกอริทึม
| อัลกอริทึม | ขนาด Digest | ความยาว Hex | มาตรฐาน | เหมาะสำหรับ |
|---|---|---|---|---|
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Deprecated — legacy git commits, old TLS |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums only — broken since 2004 |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, alternative to SHA-2 |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
SHA-1 ทำงานอย่างไร
SHA-1 ใช้โครงสร้าง Merkle-Damgard: ข้อความถูก padding แล้วแบ่งเป็นบล็อกขนาด 512 บิต และแต่ละบล็อกถูกประมวลผลผ่าน 80 รอบของการดำเนินการระดับบิตที่ผสมอินพุตกับตารางข้อความที่ได้จากบล็อก state words ขนาด 32 บิตจำนวนห้าคำ (H0 ถึง H4) รับข้อมูลสถานะแฮชที่กำลังดำเนินการ และการเชื่อมต่อสุดท้ายของ words เหล่านี้สร้าง digest ขนาด 160 บิต
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
| ขั้นตอน | คำอธิบาย |
|---|---|
| Padding | Append a 1-bit, then zeros, until message length is 448 mod 512. Append the original length as a 64-bit big-endian integer. |
| Block splitting | Divide the padded message into 512-bit (64-byte) blocks. |
| Expansion | Expand each 16-word block into 80 words using a left-rotate-by-1 XOR feedback schedule. |
| Compression | Process 80 rounds per block using four nonlinear functions (Ch, Parity, Maj, Parity) across rounds 0-19, 20-39, 40-59, and 60-79. |
| Output | Concatenate the five 32-bit state words (H0-H4) into a 160-bit (20-byte) digest, rendered as 40 hexadecimal characters. |
ความแตกต่างหลักระหว่าง SHA-1 และ MD5 คือจำนวน state words (5 เทียบกับ 4), จำนวนรอบต่อบล็อก (80 เทียบกับ 64) และการใช้ตารางข้อความพร้อม left-rotate feedback ความแตกต่างเหล่านี้ทำให้ SHA-1 มีเอาต์พุตที่ใหญ่กว่า (160 เทียบกับ 128 บิต) และในตอนแรกให้ระยะห่างด้านความปลอดภัยที่สูงกว่า แม้ว่าทั้งสองอัลกอริทึมถือว่าเสียหายแล้วสำหรับความทนทานต่อการชน
ตัวอย่างโค้ด
วิธีสร้างแฮช SHA-1 ในภาษาและสภาพแวดล้อมยอดนิยม ต่างจาก MD5 ตรงที่ SHA-1 พร้อมใช้งานใน Web Crypto API ของเบราว์เซอร์ ทำให้ใช้งานได้โดยไม่ต้องใช้ไลบรารีภายนอกทั้งในสภาพแวดล้อมเบราว์เซอร์และ Node.js
// SHA-1 is available in the Web Crypto API
async function sha1(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-1', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha1('hello world')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha1').update('hello world').digest('hex')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"import hashlib
# Basic SHA-1 hash
result = hashlib.sha1(b'hello world').hexdigest()
print(result) # → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a string (encode to bytes first)
text = 'hello world'
hashlib.sha1(text.encode('utf-8')).hexdigest()
# → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a file in chunks
with open('file.bin', 'rb') as f:
sha1 = hashlib.sha1()
for chunk in iter(lambda: f.read(8192), b''):
sha1.update(chunk)
print(sha1.hexdigest())package main
import (
"crypto/sha1"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha1.Sum(data)
fmt.Printf("%x\n", hash)
// → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
}# Using sha1sum (Linux) or shasum (macOS) echo -n "hello world" | sha1sum # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # macOS echo -n "hello world" | shasum -a 1 # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # Hash a file sha1sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl sha1 # → SHA1(stdin)= 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed