Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การเข้ารหัส SHA โดยใช้ Python?


หนึ่งในความกังวลหลักของบริษัทไอทีทั้งหมดในเรื่องความปลอดภัยของข้อมูลที่นั่น มีเทคนิคการแฮชที่หลากหลายสำหรับฉายภาพและตรวจสอบข้อมูลของเรา

แฮชคืออะไร

แฮชเป็นฟังก์ชันที่ใช้ลำดับความยาวผันแปรของไบต์เป็นอินพุตและแปลงเป็นลำดับความยาวคงที่ อย่างไรก็ตาม การรับข้อมูลดั้งเดิม (ไบต์อินพุต) กลับมานั้นไม่ใช่เรื่องง่าย ตัวอย่างเช่น x คือข้อมูลที่คุณป้อน และ f คือ f คือฟังก์ชันแฮช ดังนั้นการคำนวณ f(x) ทำได้ง่ายและรวดเร็ว แต่การพยายามรับ x อีกครั้งเป็นงานที่ใช้เวลานานมาก

ค่าที่ส่งคืนจากฟังก์ชันแฮชเรียกว่า hash, checksum, hash value หรือ message dissolved

เราสามารถสรุปได้ดังนี้ -

การเข้ารหัส SHA โดยใช้ Python?

สมมติว่าคุณต้องการแปลงข้อความ “Hello World” เป็นฟังก์ชันแฮช sha1 ผลลัพธ์ที่ได้คือ:0a4d55a8d778e5022fab701977c5d840bbc486d0,

การเข้ารหัส SHA โดยใช้ Python?

ในสถานการณ์จริง ฟังก์ชันแฮชถูกใช้อย่างมากในอัลกอริธึมการเข้ารหัส ในลายเซ็นดิจิทัล ลายนิ้วมือ เพื่อจัดเก็บรหัสผ่าน และอีกมากมาย ในฐานะโปรแกรมเมอร์หลาม เราจำเป็นต้องมีฟังก์ชันแฮชเพื่อตรวจสอบความซ้ำซ้อนของข้อมูลหรือไฟล์ เพื่อตรวจสอบความสมบูรณ์ของข้อมูลเมื่อคุณส่งข้อมูลผ่านเครือข่ายสาธารณะ การจัดเก็บรหัสผ่านในฐานข้อมูล ฯลฯ

สองฟังก์ชันแฮชหรืออัลกอริธึมที่ใช้กันมากที่สุดคือ -

  • 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