برنامه نویسی

جریان ایجاد امضای دیجیتال و تأیید در پایتون

این جریان نحوه ایجاد و تأیید یک امضای دیجیتال را با استفاده از cryptography کتابخانه در پایتون این فرآیند صحت و یکپارچگی پیام را تضمین می کند و تأیید می کند که توسط دارنده کلید خصوصی امضا شده و تغییری نکرده است.
3 مرحله اصلی وجود دارد.

  1. ایجاد جفت کلید:

    • کلید خصوصی: با استفاده از RSA، با توان عمومی 65537 و اندازه کلید 2048 بیت ایجاد شده است.
    • کلید عمومی: برگرفته از کلید خصوصی.
    • ذخیره سازی: هر دو کلید در فایل ها با فرمت PEM ذخیره می شوند.
  2. پیام را امضا کنید:

    • پیام: داده هایی که باید امضا شوند.
    • عملکرد هش: SHA-256 برای هش پیام استفاده می شود.
    • لایه گذاری: PSS (Signature Scheme احتمالی) با MGF1 (تابع تولید ماسک) و حداکثر طول نمک برای بالشتک استفاده می شود.
    • امضا: پیام با استفاده از کلید خصوصی امضا می شود و امضا در یک فایل ذخیره می شود.
  3. تأیید امضا:

    • کلید عمومی: از فایل PEM بارگیری شده است.
    • امضا: از فایل بارگذاری شده است.
    • پیام: پیام اصلی که امضا شد.
    • تایید: کلید عمومی به همراه پیام و امضا برای تایید صحت امضا استفاده می شود. اگر امضا معتبر باشد، به این معنی است که پیام توسط کلید خصوصی مربوطه امضا شده است.

مرحله 1: کتابخانه مورد نیاز را نصب کنید

ابتدا مطمئن شوید که آن را دارید cryptography کتابخانه نصب شده است می توانید آن را با استفاده از pip نصب کنید:

pip install cryptography
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: یک جفت کلید ایجاد کنید

یک جفت کلید از یک کلید خصوصی (که برای امضا استفاده می شود) و یک کلید عمومی (که برای تأیید استفاده می شود) تشکیل شده است.

from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization

# Generate private key
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
)

# Generate public key from the private key
public_key = private_key.public_key()

# Save the private key to a file
with open("private_key.pem", "wb") as f:
    f.write(private_key.private_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PrivateFormat.PKCS8,
        encryption_algorithm=serialization.NoEncryption()
    ))

# Save the public key to a file
with open("public_key.pem", "wb") as f:
    f.write(public_key.public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.SubjectPublicKeyInfo
    ))
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 3: یک پیام را امضا کنید

برای ایجاد یک امضای دیجیتال، از کلید خصوصی برای امضای پیام استفاده خواهید کرد.

from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

# Message to be signed
message = b"Hello, this is a secret message!"

# Sign the message
signature = private_key.sign(
    message,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)

# Save the signature to a file
with open("signature.bin", "wb") as f:
    f.write(signature)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 4: تأیید امضا

برای تأیید امضا، از کلید عمومی استفاده کنید تا بررسی کنید که آیا با پیام مطابقت دارد یا خیر.

# Load the public key
with open("public_key.pem", "rb") as f:
    public_key = serialization.load_pem_public_key(f.read())

# Load the signature
with open("signature.bin", "rb") as f:
    signature = f.read()

# Message to be verified
message = b"Hello, this is a secret message!"

# Verify the signature
try:
    public_key.verify(
        signature,
        message,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    print("The signature is valid.")
except:
    print("The signature is invalid.")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا