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

Keyed-Hashing สำหรับการตรวจสอบข้อความใน python


การรับรองความถูกต้องของข้อความโดยใช้ฟังก์ชันแฮชเข้ารหัสใน python สามารถทำได้ผ่านกลไก HMAC เราสามารถใช้ HMAC กับฟังก์ชันแฮชที่ทำซ้ำได้หลายแบบ เช่น MD5, SHA-1 ร่วมกับคีย์ที่ใช้ร่วมกันที่เป็นความลับ

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

ไวยากรณ์

hmac.new(key, msg = None, digestmod = None)

ส่งคืนวัตถุ hmac ที่สร้างใหม่

ที่ไหน −

  • คีย์ – คีย์ลับที่ใช้ร่วมกันที่นี่

  • Msg – ข้อความที่จะแฮชที่นี่ ข้อความที่จะแฮชที่นี่

  • Digestmod – ชื่อหรือโมดูลไดเจสต์สำหรับอ็อบเจ็กต์ HMAC ที่จะใช้

วิธีการและคุณสมบัติของโมดูล HMAC -

  • hmac.update(ข้อความ)

    ใช้เพื่ออัปเดตวัตถุ hmac โดยใช้ข้อความที่กำหนด ข้อความจะถูกต่อท้ายหากคุณเรียกใช้วิธีนี้มากกว่าหนึ่งครั้ง

  • hmac.digest()

    ส่งคืนไดเจสต์ของไบต์ที่ส่งผ่านไปยังเมธอด update() จนถึงตอนนี้

  • hashlib.hexdigest()

    เช่นเดียวกับไดเจสต์() ยกเว้นไดเจสต์ถูกส่งกลับเป็นสตริงสองเท่าของความยาวที่มีเฉพาะเลขฐานสิบหก อาจใช้เพื่อแลกเปลี่ยนค่าอย่างปลอดภัยในอีเมลหรือสภาพแวดล้อมที่ไม่ใช่ไบนารีอื่นๆ

  • haslib.copy()

    ส่งคืนสำเนา (“โคลน”) ของวัตถุ hmac

ตัวอย่าง1

การสร้างแฮชโดยใช้อัลกอริทึมแฮช MD5 เริ่มต้น

#Import libraries
import hashlib
import hmac
#data
update_bytes = b'Lorem ipsum dolor sit amet, consectetur adipiscing elit. \
   Suspendisse tristique condimentum viverra. Nulla accumsan \
   orci risus, non congue lacus feugiat id.'
#secret key
password = b'402xy5#'
#Generate cryptographic hash using md5
my_hmac = hmac.new(update_bytes, password, hashlib.md5)
print("The first digest: " + str(my_hmac.digest()))
print("The Canonical Name: " + my_hmac.name)
print("Block size: " + str (my_hmac.block_size) + "bytes")
print("Digest size: " + str(my_hmac.digest_size) + "bytes")
#Create a copy of the hmac object
my_hmac_cpy = my_hmac.copy()
print("The Copied digest: " + str(my_hmac_cpy.digest()))

ผลลัพธ์

The first digest: b'H\xcc.nf\xdd\x8bC\x8di\x0cC\xb8\xe9l\xa8'
The Canonical Name: hmac-md5
Block size: 64bytes
Digest size: 16bytes
The Copied digest: b'H\xcc.nf\xdd\x8bC\x8di\x0cC\xb8\xe9l\xa8'

เนื่องจาก SHA1 ถือว่ามีความปลอดภัยมากกว่าอัลกอริธึม MD5 และหากคุณกำลังคิดที่จะรันโปรแกรมข้างต้นโดยใช้อัลกอริธึม SHA1 เพียงแก้ไขชื่ออัลกอริทึมในบรรทัดนี้

my_hmac =hmac.new (update_bytes, รหัสผ่าน, hashlib.sha1)
และผลลัพธ์ของเราจะเป็นดังนี้:

ไดเจสต์แรก:b'\xc3T\xe7[\xc8\xa3O/$\xbd`A\xad\x07d\xe8\xae\xa2!\xb4'

The Canonical Name: hmac-sha1
Block size: 64bytes
Digest size: 20bytes
The Copied digest: b'\xc3T\xe7[\xc8\xa3O/$\xbd`A\xad\x07d\xe8\xae\xa2!\xb4'

แอพพลิเคชั่น

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