หนึ่งในความกังวลหลักของบริษัทไอทีทั้งหมดในเรื่องความปลอดภัยของข้อมูลที่นั่น มีเทคนิคการแฮชที่หลากหลายสำหรับฉายภาพและตรวจสอบข้อมูลของเรา
แฮชคืออะไร
แฮชเป็นฟังก์ชันที่ใช้ลำดับความยาวผันแปรของไบต์เป็นอินพุตและแปลงเป็นลำดับความยาวคงที่ อย่างไรก็ตาม การรับข้อมูลดั้งเดิม (ไบต์อินพุต) กลับมานั้นไม่ใช่เรื่องง่าย ตัวอย่างเช่น x คือข้อมูลที่คุณป้อน และ f คือ f คือฟังก์ชันแฮช ดังนั้นการคำนวณ f(x) ทำได้ง่ายและรวดเร็ว แต่การพยายามรับ x อีกครั้งเป็นงานที่ใช้เวลานานมาก
ค่าที่ส่งคืนจากฟังก์ชันแฮชเรียกว่า hash, checksum, hash value หรือ message dissolved
เราสามารถสรุปได้ดังนี้ -
สมมติว่าคุณต้องการแปลงข้อความ “Hello World” เป็นฟังก์ชันแฮช sha1 ผลลัพธ์ที่ได้คือ:0a4d55a8d778e5022fab701977c5d840bbc486d0,
ในสถานการณ์จริง ฟังก์ชันแฮชถูกใช้อย่างมากในอัลกอริธึมการเข้ารหัส ในลายเซ็นดิจิทัล ลายนิ้วมือ เพื่อจัดเก็บรหัสผ่าน และอีกมากมาย ในฐานะโปรแกรมเมอร์หลาม เราจำเป็นต้องมีฟังก์ชันแฮชเพื่อตรวจสอบความซ้ำซ้อนของข้อมูลหรือไฟล์ เพื่อตรวจสอบความสมบูรณ์ของข้อมูลเมื่อคุณส่งข้อมูลผ่านเครือข่ายสาธารณะ การจัดเก็บรหัสผ่านในฐานข้อมูล ฯลฯ
สองฟังก์ชันแฮชหรืออัลกอริธึมที่ใช้กันมากที่สุดคือ -
-
MD5 - MD5 หรืออัลกอริธึมการแยกข้อความจะสร้างค่าแฮช 128 บิต มีปัญหาด้านความปลอดภัยสองสามประการกับอัลกอริธึม md5 เราจึงใช้อัลกอริทึมนี้เพื่อตรวจสอบความสมบูรณ์ของข้อมูลเป็นหลัก
-
SHA - มีอัลกอริธึมหลายชุดภายใต้กลุ่ม SHA ของอัลกอริธึม ซึ่งพัฒนาโดยมาตรฐานการประมวลผลข้อมูลของรัฐบาลกลางสหรัฐ อัลกอริธึมเหล่านี้มีความปลอดภัยมากกว่า md5 มาก ดังนั้นจึงใช้กันอย่างแพร่หลายในหลาย ๆ ด้านรวมถึงแอปพลิเคชันการเข้ารหัส ข้อความที่สร้างโดยอัลกอริทึมเหล่านี้มีตั้งแต่ 160 บิตถึง 512 บิต
SHA1
SHA คือกลุ่มของอัลกอริทึม เช่น SHA1, SHA224, SHA256, SHA384, SHA512 อัลกอริทึม SHA1 ถือว่ามีความปลอดภัยมากกว่า md5 และด้วยเหตุนี้จึงมีการใช้กันอย่างแพร่หลายในหลายพื้นที่
ก่อนอื่น หากคุณต้องการใช้อัลกอริธึมการแฮช ให้นำเข้าโมดูล hashlib -
นำเข้า hashlib
ตอนนี้เพื่อตรวจสอบว่าอัลกอริธึมที่ต้องการหรืออัลกอริธึมทั้งหมดมีอยู่ในโมดูล hashlib หรือไม่ -
>>> พิมพ์ (hashlib.algorithms_available){'sha3_256', 'sha3_224', 'sha1', 'blake2b', 'sha512', 'dsaEncryption', 'dsaWithSHA', 'DSA', 'md5', ' sha384', 'sha224', 'sha3_384', 'ecdsa-with-SHA1', 'DSA-SHA', 'SHA1', 'md4', 'SHA256', 'MD4', 'sha3_512', 'วังวน', ' sha256', 'shake_256', 'SHA', 'RIPEMD160', 'shake_128', 'SHA512', 'ripemd160', 'SHA224', 'sha', 'blake2s', 'SHA384', 'MD5'}
รายการอัลกอริทึมด้านบนที่มีให้ใช้งานผ่านโมดูล hashlib รวมถึงอัลกอริทึมผ่าน OpenSSL
อย่างไรก็ตาม หากต้องการตรวจสอบรายการอัลกอริธึมที่พร้อมใช้งานตลอดเวลา เราตรวจสอบได้ผ่านอัลกอริทึม_guaranteed
<ก่อน>>>> พิมพ์ (hashlib.algorithms_guaranteed){'sha3_512', 'sha256', 'sha3_256', 'shake_256', 'sha3_224', 'sha1', 'blake2b', 'sha512', 'md5', ' shake_128', 'sha384', 'sha224', 'sha3_384', 'blake2s'}มาสร้างโปรแกรมง่ายๆ เพื่อทำความเข้าใจอัลกอริทึม sha1
นำเข้า hashlibhash_obj =hashlib.sha1(b'Hello, Python!')print(hash_obj.hexdigest())
ผลลัพธ์
00d375a3693fde63e9540b91656c6ac5b5341f7c
อย่างไรก็ตาม หากคุณต้องการส่งกลับลำดับไบต์ คุณควรใช้ hash_obj.diget() เช่น −
นำเข้า hashlibhash_obj =hashlib.sha1(b'Hello, Python!')#ในการสร้าง ลำดับของ bytesprint(hash_obj.digest())
ผลลัพธ์
b'\x00\xd3u\xa3i?\xdec\xe9T\x0b\x91elj\xc5\xb54\x1f|'
หากคุณสังเกตเห็น เราใช้ 'b' ก่อนตัวอักษรสตริงใดๆ นี่คือการสร้างไบต์จากสตริงเนื่องจากฟังก์ชัน hashing ยอมรับเฉพาะลำดับไบต์ที่เป็นพารามิเตอร์
ในกรณีที่คุณต้องการส่งสตริงจากคอนโซล อย่าลืมเข้ารหัสสตริงตามลำดับไบต์ -
นำเข้า hashlibmystring =input('Enter string to hash:')hash_obj =hashlib.sha1(mystring.encode())print(hash_obj.hexdigest())
ผลลัพธ์
ป้อนสตริงเพื่อแฮช:สวัสดี TutorialsPointb20d14ead3e50552fc1f1cd96696b111a163dffa