หนึ่งในความกังวลหลักของบริษัทไอทีทั้งหมดในเรื่องความปลอดภัยของข้อมูลที่นั่น มีเทคนิคการแฮชที่หลากหลายสำหรับฉายภาพและตรวจสอบข้อมูลของเรา
แฮชคืออะไร
แฮชเป็นฟังก์ชันที่ใช้ลำดับความยาวผันแปรของไบต์เป็นอินพุตและแปลงเป็นลำดับความยาวคงที่ อย่างไรก็ตาม การรับข้อมูลดั้งเดิม (ไบต์อินพุต) กลับมานั้นไม่ใช่เรื่องง่าย ตัวอย่างเช่น x คือข้อมูลที่คุณป้อน และ f คือ f คือฟังก์ชันแฮช ดังนั้นการคำนวณ f(x) ทำได้ง่ายและรวดเร็ว แต่การพยายามรับ x อีกครั้งเป็นงานที่ใช้เวลานานมาก
ค่าที่ส่งคืนจากฟังก์ชันแฮชเรียกว่า hash, checksum, hash value หรือ message dissolved
เราสามารถสรุปได้ดังนี้ -
สมมติว่าคุณต้องการแปลงข้อความ "Hello World" เป็นฟังก์ชันแฮช md5 ผลลัพธ์ที่ได้คือ a,
ในสถานการณ์จริง ฟังก์ชันแฮชถูกใช้อย่างมากในอัลกอริธึมการเข้ารหัส ในลายเซ็นดิจิทัล ลายนิ้วมือ เพื่อจัดเก็บรหัสผ่าน และอีกมากมาย ในฐานะโปรแกรมเมอร์หลาม เราจำเป็นต้องมีฟังก์ชันแฮชเพื่อตรวจสอบความซ้ำซ้อนของข้อมูลหรือไฟล์ เพื่อตรวจสอบความสมบูรณ์ของข้อมูลเมื่อคุณส่งข้อมูลผ่านเครือข่ายสาธารณะ การจัดเก็บรหัสผ่านในฐานข้อมูล ฯลฯ
ฟังก์ชันแฮชหรืออัลกอริธึมที่ใช้กันส่วนใหญ่สองอย่างคือ -
-
MD5 - MD5 หรืออัลกอริธึมการแยกข้อความจะสร้างค่าแฮช 128 บิต มีปัญหาด้านความปลอดภัยสองสามประการกับอัลกอริธึม md5 เราจึงใช้อัลกอริทึมนี้เพื่อตรวจสอบความสมบูรณ์ของข้อมูลเป็นหลัก
-
SHA - มีอัลกอริธึมหลายชุดภายใต้กลุ่ม SHA ของอัลกอริธึม ซึ่งพัฒนาโดยมาตรฐานการประมวลผลข้อมูลของรัฐบาลกลางสหรัฐ อัลกอริธึมเหล่านี้มีความปลอดภัยมากกว่า md5 มาก ดังนั้นจึงใช้กันอย่างแพร่หลายในหลาย ๆ ด้านรวมถึงแอปพลิเคชันการเข้ารหัส ข้อความที่สร้างโดยอัลกอริทึมเหล่านี้มีตั้งแต่ 160 บิตถึง 512 บิต
MD5
ไลบรารีมาตรฐาน Python มีโมดูลที่เรียกว่า hashlib ซึ่งมีอัลกอริธึมการแฮชยอดนิยมส่วนใหญ่ อัลกอริทึมส่วนใหญ่มีการใช้งานภายในโมดูล hashlib อย่างไรก็ตาม หากคุณติดตั้ง OpenSSL ไว้ สามารถใช้ hashlib เพื่อทำงานกับอัลกอริธึมเหล่านี้ได้เช่นกัน
ก่อนอื่น หากคุณต้องการใช้อัลกอริธึมการแฮช ให้นำเข้าโมดูล 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'}มาสร้างโปรแกรมง่ายๆ โดยใช้อัลกอริธึม md5 กัน -
รหัส
นำเข้า hashlibhash_obj =hashlib.md5(b'Hello, Python!')print(hash_obj.hexdigest())
ผลลัพธ์
a0af7810eb5fcb84c730f851361de06a
โค้ดด้านบนใช้คำว่า “Hello, Python!” สตริงเป็นอินพุตและพิมพ์ HEX ไดเจสต์ของสตริงนั้น Hexdigest ส่งคืนสตริง HEX ที่แสดงถึงแฮช
อย่างไรก็ตาม หากคุณต้องการส่งกลับลำดับไบต์ คุณควรใช้ hash_obj.diget() เช่น −
นำเข้า hashlibhash_obj =hashlib.md5(b'Hello, Python!')#ในการสร้าง ลำดับของไบต์พิมพ์(hash_obj.digest())
ผลลัพธ์
b'\xa0\xafx\x10\xeb_\xcb\x84\xc70\xf8Q6\x1d\xe0j'
หากคุณสังเกตเห็น เราใช้ 'b' ก่อนตัวอักษรสตริงใดๆ นี่คือการสร้างไบต์จากสตริงเนื่องจากฟังก์ชัน hashing ยอมรับเฉพาะลำดับไบต์ที่เป็นพารามิเตอร์
ในกรณีที่คุณต้องการส่งสตริงจากคอนโซล อย่าลืมเข้ารหัสสตริงตามลำดับไบต์ -
นำเข้า hashlibmystring =input('Enter string to hash:')hash_obj =hashlib.md5(mystring.encode())print(hash_obj.hexdigest())
ผลลัพธ์
ป้อนสตริงเพื่อแฮช:สวัสดี TutorialsPoint9a5d3fad65690dcf44adaec67226abe7