Python में SHA-256 हैशिंग — hashlib गाइड

·DevOps Engineer & Python Automation Specialist·समीक्षकMaria Santos·प्रकाशित

मुफ़्त SHA-256 हैश जनरेटर को सीधे अपने ब्राउज़र में उपयोग करें — इंस्टॉलेशन की ज़रूरत नहीं।

SHA-256 हैश जनरेटर ऑनलाइन आज़माएं →

मैंने जितने भी डिप्लॉयमेंट पाइपलाइन बनाए हैं, उनमें अंततः फ़ाइल चेकसम सत्यापित करने, webhook पेलोड पर हस्ताक्षर करने, या कैश कुंजी को फ़िंगरप्रिंट करने की आवश्यकता पड़ी है। Python SHA-256 हैशिंग अंतर्निर्मित hashlib मॉड्यूल के साथ इन सभी मामलों को संभालती है — और यह पहले से इंस्टॉल है। hashlib.sha256() CPython पर OpenSSL की C-level implementation use करता है, इसलिए यह तेज़ और FIPS-compliant है। बिना कोई कोड लिखे त्वरित एकबारगी हैश के लिए, ऑनलाइन SHA-256 हैश जनरेटर तुरंत परिणाम देता है। सभी उदाहरण Python 3.9+ को लक्षित करते हैं।

  • hashlib.sha256(data).hexdigest() बाइट्स हैश करने का मानक तरीका है — stdlib का हिस्सा, OpenSSL द्वारा समर्थित।
  • स्ट्रिंग को पहले बाइट्स में एन्कोड करना होगा: hashlib.sha256("text".encode("utf-8"))।
  • फ़ाइल चेकसम के लिए, .update() के माध्यम से खंडों में फ़ीड करें — बड़ी फ़ाइल को एक बार में मेमोरी में कभी न लोड करें।
  • HMAC-SHA256 के लिए hmac मॉड्यूल आवश्यक है: hmac.new(key, msg, hashlib.sha256) — SHA-256 अकेले में कोई कुंजी नहीं होती।

SHA-256 हैशिंग क्या है?

SHA-256 (Secure Hash Algorithm, 256-bit) किसी भी लंबाई का इनपुट लेकर fixed 256-bit (32-byte) डाइजेस्ट उत्पन्न करता है। समान इनपुट हमेशा समान आउटपुट देता है, लेकिन इनपुट में एक भी बिट परिवर्तन से पूर्णतः भिन्न हैश उत्पन्न होता है — इस गुण को एवलांच प्रभाव कहते हैं। SHA-256, SHA-2 परिवार का हिस्सा है, NIST द्वारा मानकीकृत है, और TLS प्रमाणपत्र फ़िंगरप्रिंट, Git कमिट ID, Bitcoin ब्लॉक हेडर, और फ़ाइल अखंडता सत्यापन की आधारशिला है। एल्गोरिदम 256-बिट आउटपुट उत्पन्न करने के लिए 64 संपीड़न चक्रों के साथ Merkle-Damgård संरचना का उपयोग करता है।

Before · text
After · text
deployment-v4.2.1
a1f7c3d8e9b2...27ae41e4649b (64 hex chars)

ऊपर दिया हेक्स डाइजेस्ट मानक प्रतिनिधित्व है — 64 हेक्साडेसिमल वर्ण, चाहे आप एक बाइट हैश करें या पूरी डिस्क छवि, लंबाई हमेशा समान रहती है।

hashlib.sha256() — मानक लाइब्रेरी दृष्टिकोण

hashlib मॉड्यूल हर Python इंस्टॉलेशन के साथ आता है — pip install की कोई आवश्यकता नहीं। हैश ऑब्जेक्ट बनाने के लिए hashlib.sha256() को bytes तर्क के साथ कॉल करें, फिर .hexdigest() (हेक्स स्ट्रिंग) या .digest() (कच्चे बाइट्स) से परिणाम प्राप्त करें। फ़ंक्शन का नाम लोअरकेस है: sha256, न कि SHA256

Python 3.9+ — न्यूनतम SHA-256 हैश
import hashlib

# बाइट स्ट्रिंग को सीधे हैश करें
digest = hashlib.sha256(b"deployment-v4.2.1").hexdigest()
print(digest)
# a8f5f167f44f4964e6c998dee827110c3f1de4d0280c68cba98cf70b4b5157db

hashlib.sha256() के साथ सबसे सामान्य गलती bytes के बजाय str पास करना है। Python स्ट्रिंग Unicode हैं, और हैश फ़ंक्शन कच्चे बाइट्स पर कार्य करते हैं। हैश करने से पहले आपको .encode("utf-8") कॉल करना होगा। पहली बार लगभग हर कोई इस गलती में फंसता है।

Python 3.9+ — स्ट्रिंग हैश करना
import hashlib

# हैश करने से पहले स्ट्रिंग को बाइट्स में एन्कोड करना होगा
config_key = "redis://cache.internal:6379/0"
digest = hashlib.sha256(config_key.encode("utf-8")).hexdigest()
print(digest)
# 7d3f8c2a1b9e4f5d6c8a7b3e2f1d9c4a5b8e7f6d3c2a1b9e4f5d6c8a7b3e2f1d

.update() मेथड आपको डेटा को क्रमिक रूप से फ़ीड करने देता है। h.update(a); h.update(b) कॉल करना hashlib.sha256(a + b) के समान है। इसी तरह फ़ाइलों को बिना पूरी सामग्री मेमोरी में लोड किए खंडों में हैश किया जाता है।

Python 3.9+ — update() से क्रमिक हैशिंग
import hashlib

h = hashlib.sha256()
h.update(b"request_id=req_7f3a91bc")
h.update(b"&timestamp=1741614120")
h.update(b"&amount=4999")
print(h.hexdigest())
# hashlib.sha256(b"request_id=req_7f3a91bc&timestamp=1741614120&amount=4999").hexdigest() के समान
नोट:.digest() कच्चे 32 बाइट्स लौटाता है। .hexdigest() 64-वर्ण का हेक्स स्ट्रिंग लौटाता है। HMAC, Base64 एन्कोडिंग, या बाइनरी प्रोटोकॉल में परिणाम फ़ीड करते समय .digest() का उपयोग करें। लॉगिंग, डेटाबेस कॉलम, और चेकसम तुलना के लिए .hexdigest() का उपयोग करें।

HMAC-SHA256 — hmac मॉड्यूल के साथ कुंजी-युक्त हैशिंग

SHA-256 अकेले में गोपनीय कुंजी की कोई अवधारणा नहीं है — समान इनपुट वाला कोई भी व्यक्ति समान हैश निकाल सकता है। यदि आपको यह सिद्ध करना है कि संदेश किसी विशेष प्रेषक से आया है (webhook सत्यापन, API अनुरोध हस्ताक्षर, टोकन प्रमाणीकरण), तो HMAC की आवश्यकता है। hmac मॉड्यूल Python की stdlib का हिस्सा है और कुंजी को हैशिंग में शामिल करता है — सिर्फ वही डाइजेस्ट बना या verify कर सकता है जिसके पास वही कुंजी हो।

Python 3.9+ — मूलभूत HMAC-SHA256
import hmac
import hashlib

# Webhook हस्ताक्षर सत्यापन
secret_key = b"whsec_9f3a7b2e1d4c8a5b"
payload = b'{"event":"invoice.paid","invoice_id":"inv_8d2c","amount":14900}'

signature = hmac.new(secret_key, payload, hashlib.sha256).hexdigest()
print(signature)
# 64-character hex HMAC-SHA256 digest

आने वाले HMAC को सत्यापित करने के लिए == ऑपरेटर के बजाय hmac.compare_digest() आवश्यक है। समानता ऑपरेटर पहले असमान बाइट पर शॉर्ट-सर्किट करता है, और आक्रमणकर्ता प्रतिक्रिया समय मापकर सही हस्ताक्षर का बाइट-दर-बाइट अनुमान लगा सकता है। compare_digest() असमानता चाहे कहीं भी हो, स्थिर समय में चलता है।

Python 3.9+ — webhook हस्ताक्षर सत्यापित करें
import hmac
import hashlib

def verify_webhook(payload: bytes, received_sig: str, secret: bytes) -> bool:
    """स्थिर-समय तुलना का उपयोग करके webhook हस्ताक्षर सत्यापित करें।"""
    expected = hmac.new(secret, payload, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, received_sig)

# Stripe-शैली webhook सत्यापन का अनुकरण
incoming_payload = b'{"event":"payment.completed","amount":4999}'
incoming_signature = "a1b2c3d4e5f6..."  # X-Signature हेडर से
webhook_secret = b"whsec_9f3a7b2e1d4c"

if verify_webhook(incoming_payload, incoming_signature, webhook_secret):
    print("हस्ताक्षर वैध — इवेंट संसाधित करें")
else:
    print("हस्ताक्षर असंगत — अनुरोध अस्वीकार करें")

HMAC-SHA256 अनुरोध हस्ताक्षर

API अनुरोध हस्ताक्षर उसी सिद्धांत का पालन करता है: अनुरोध घटकों (विधि, पथ, टाइमस्टैम्प, बॉडी हैश) से एक कैनोनिकल स्ट्रिंग बनाएं और अपनी गोपनीय कुंजी से हस्ताक्षर करें। AWS Signature V4, Stripe, और GitHub webhooks सभी इस पैटर्न के भिन्न रूप उपयोग करते हैं।

Python 3.9+ — HMAC-SHA256 से API अनुरोध पर हस्ताक्षर करें
import hmac
import hashlib
import time

def sign_request(method: str, path: str, body: bytes, secret: bytes) -> str:
    """API अनुरोध के लिए HMAC-SHA256 हस्ताक्षर बनाएं।"""
    timestamp = str(int(time.time()))
    body_hash = hashlib.sha256(body).hexdigest()

    # कैनोनिकल स्ट्रिंग: method + path + timestamp + body hash
    canonical = f"{method}\n{path}\n{timestamp}\n{body_hash}"
    signature = hmac.new(secret, canonical.encode("utf-8"), hashlib.sha256).hexdigest()

    return f"ts={timestamp},sig={signature}"

# उपयोग
api_secret = b"sk_live_9f3a7b2e1d4c8a5b6e7f"
request_body = b'{"customer_id":"cust_4f2a","plan":"enterprise"}'
auth_header = sign_request("POST", "/api/v2/subscriptions", request_body, api_secret)
print(f"Authorization: HMAC-SHA256 {auth_header}")
# Authorization: HMAC-SHA256 ts=1741614120,sig=7d3f8c2a...

Base64-एन्कोडेड HMAC-SHA256

कुछ API (AWS Signature V4, विभिन्न पेमेंट गेटवे) HMAC परिणाम को हेक्स के बजाय Base64-एन्कोडेड स्ट्रिंग के रूप में अपेक्षित करते हैं। अंतर यह है: हेक्स 64 वर्ण उपयोग करता है, Base64 उसी 32-बाइट डाइजेस्ट के लिए 44 वर्ण उपयोग करता है।

Python 3.9+ — Base64-एन्कोडेड HMAC-SHA256
import hmac
import hashlib
import base64

secret = b"webhook_secret_9f3a"
message = b"POST /api/v2/events 1741614120"

# हेक्स आउटपुट: 64 वर्ण
hex_sig = hmac.new(secret, message, hashlib.sha256).hexdigest()
print(f"Hex:    {hex_sig}")

# Base64 आउटपुट: 44 वर्ण (छोटा, HTTP हेडर में सामान्य)
raw_sig = hmac.new(secret, message, hashlib.sha256).digest()
b64_sig = base64.b64encode(raw_sig).decode("ascii")
print(f"Base64: {b64_sig}")

datetime, UUID, और कस्टम ऑब्जेक्ट हैश करना

SHA-256 कच्चे बाइट्स पर कार्य करता है, इसलिए गैर-bytes प्रकार — datetime, UUID, dataclasses, Pydantic मॉडल — को हैश करने से पहले बाइट्स में क्रमबद्ध करना होगा। कोई स्वचालित रूपांतरण नहीं है; आप कैनोनिकल प्रतिनिधित्व चुनते हैं। सिस्टम के बीच निर्धारक हैशिंग के लिए, हमेशा स्पष्ट एन्कोडिंग और स्थिर क्रमिकता प्रारूप उपयोग करें (datetimes के लिए ISO 8601, UUIDs के लिए मानक स्ट्रिंग रूप, dicts के लिए sorted-key JSON)।

Python 3.9+ — datetime और UUID हैश करें
import hashlib
import uuid
from datetime import datetime, timezone

# datetime — पोर्टेबिलिटी के लिए स्पष्ट UTC ऑफ़सेट के साथ ISO 8601 उपयोग करें
event_time = datetime(2026, 3, 28, 12, 0, 0, tzinfo=timezone.utc)
time_hash = hashlib.sha256(event_time.isoformat().encode("utf-8")).hexdigest()
print(f"datetime hash: {time_hash[:16]}...")

# UUID — कैनोनिकल स्ट्रिंग रूप हैश करें (लोअरकेस, हाइफन सहित)
record_id = uuid.uuid4()
uuid_hash = hashlib.sha256(str(record_id).encode("utf-8")).hexdigest()
print(f"UUID hash: {uuid_hash[:16]}...")

कस्टम ऑब्जेक्ट के लिए, हैश करने से पहले कैनोनिकल बाइट्स प्रतिनिधित्व में क्रमबद्ध करें। dict-जैसे ऑब्जेक्ट के लिए sorted keys के साथ JSON अच्छा काम करता है:

Python 3.9+ — कस्टम ऑब्जेक्ट हैश करें
import hashlib
import json
from dataclasses import dataclass, asdict

@dataclass
class Event:
    id: str
    type: str
    amount: int
    timestamp: str

def hash_event(event: Event) -> str:
    """निर्धारकता के लिए sorted-key JSON से dataclass इंस्टेंस हैश करें।"""
    canonical = json.dumps(asdict(event), sort_keys=True, separators=(",", ":"))
    return hashlib.sha256(canonical.encode("utf-8")).hexdigest()

e = Event(id="evt_4f2a", type="payment.completed", amount=4999, timestamp="2026-03-28T12:00:00Z")
print(hash_event(e))  # सभी रन और मशीनों में स्थिर
नोट:JSON serialize करते समय हमेशा dict keys sort करें (sort_keys=True)। Dict insertion order Python 3.7+ में preserve होता है, लेकिन अलग-अलग जगहों से serialize करने पर order बदल सकता है — जिससे same data का अलग हैश निकलता है।

SHA-256 फ़ाइल चेकसम — डाउनलोड और आर्टिफैक्ट सत्यापित करें

फ़ाइल का SHA-256 चेकसम निकालना एल्गोरिदम के सबसे सामान्य उपयोगों में से एक है। यह हर जगह दिखता है: Go बाइनरी के रिलीज़ पेज, Python wheel फ़ाइलें, Docker छवि मैनिफेस्ट, फ़र्मवेयर अपडेट। मुख्य बात यह है कि फ़ाइल को एक बार में लोड करने के बजाय खंडों में पढ़ें — 2 GB की ISO छवि को हैश करने के लिए 2 GB RAM की आवश्यकता नहीं होनी चाहिए।

Python 3.9+ — फ़ाइल का SHA-256 चेकसम (खंडित)
import hashlib

def sha256_checksum(filepath: str, chunk_size: int = 8192) -> str:
    """मेमोरी बचाने के लिए खंडों में पढ़कर फ़ाइल का SHA-256 हैश निकालें।"""
    h = hashlib.sha256()
    with open(filepath, "rb") as f:
        for chunk in iter(lambda: f.read(chunk_size), b""):
            h.update(chunk)
    return h.hexdigest()

# रिलीज़ आर्टिफैक्ट हैश करें
checksum = sha256_checksum("/tmp/release-v4.2.1.tar.gz")
print(f"SHA-256: {checksum}")

Python 3.11 में hashlib.file_digest() जोड़ा गया जो खंडित पठन आंतरिक रूप से करता है और समर्थित प्लेटफ़ॉर्म पर zero-copy अनुकूलन उपयोग कर सकता है। यदि आप 3.11 या बाद के संस्करण पर हैं, तो मैन्युअल लूप के बजाय इसे प्राथमिकता दें।

Python 3.11+ — hashlib.file_digest()
import hashlib

with open("/tmp/release-v4.2.1.tar.gz", "rb") as f:
    digest = hashlib.file_digest(f, "sha256")

print(digest.hexdigest())

ज्ञात चेकसम के विरुद्ध डाउनलोड की गई फ़ाइल सत्यापित करें

Python 3.9+ — चेकसम सत्यापन
import hashlib
import hmac as hmac_mod  # केवल compare_digest के लिए

def verify_checksum(filepath: str, expected_hex: str) -> bool:
    """स्थिर-समय तुलना का उपयोग करके SHA-256 चेकसम सत्यापित करें।"""
    h = hashlib.sha256()
    with open(filepath, "rb") as f:
        for chunk in iter(lambda: f.read(8192), b""):
            h.update(chunk)
    return hmac_mod.compare_digest(h.hexdigest(), expected_hex.lower())

# रिलीज़ आर्टिफैक्ट सत्यापित करें
expected = "a8f5f167f44f4964e6c998dee827110c3f1de4d0280c68cba98cf70b4b5157db"
if verify_checksum("/tmp/release-v4.2.1.tar.gz", expected):
    print("चेकसम मेल खाता है — फ़ाइल अखंड है")
else:
    print("चेकसम असंगत — फ़ाइल दूषित या छेड़छाड़ की गई हो सकती है")
नोट:चेकसम तुलना के लिए हमेशा hmac.compare_digest() उपयोग करें, भले ही कोई गोपनीय कुंजी न हो। स्थिर-समय तुलना टाइमिंग-आधारित सूचना रिसाव रोकती है। == ऑपरेटर कार्यात्मक रूप से काम करता है लेकिन सुरक्षा-संवेदनशील संदर्भों में सुरक्षित नहीं है।

Base64 एन्कोडिंग के साथ SHA-256

कुछ प्रोटोकॉल SHA-256 डाइजेस्ट को हेक्स के बजाय Base64 स्ट्रिंग के रूप में अपेक्षित करते हैं। Content-Digest और Integrity (ब्राउज़र में Subresource Integrity) जैसे HTTP हेडर Base64 उपयोग करते हैं, और JWT हस्ताक्षर Base64url-एन्कोडेड होते हैं। युक्ति यह है कि हेक्स स्ट्रिंग को नहीं बल्कि कच्चे .digest() बाइट्स को Base64-एन्कोड करें।

Python 3.9+ — Base64-एन्कोडेड SHA-256
import hashlib
import base64

data = b"integrity check payload"

# सही: कच्चे बाइट्स का Base64 (32 bytes → 44 Base64 वर्ण)
raw_digest = hashlib.sha256(data).digest()
b64_digest = base64.b64encode(raw_digest).decode("ascii")
print(f"sha256-{b64_digest}")
# sha256-<44 characters>

# गलत: हेक्स स्ट्रिंग का Base64 (64 ASCII bytes → 88 Base64 वर्ण — दोगुना आकार)
hex_digest = hashlib.sha256(data).hexdigest()
wrong = base64.b64encode(hex_digest.encode()).decode()
print(f"गलत लंबाई: {len(wrong)} वर्ण")  # 88 — API अपेक्षित नहीं
चेतावनी:कच्चे बाइट्स के बजाय हेक्स स्ट्रिंग को Base64-एन्कोड करना एक सामान्य गलती है जो अपेक्षित लंबाई से दोगुना आउटपुट देती है। API इसे अस्वीकार कर देंगे, और त्रुटि संदेश आमतौर पर कारण का कोई संकेत नहीं देता। Base64 एन्कोडिंग से पहले हमेशा .digest() कॉल करें, .hexdigest() नहीं।

hashlib.sha256() संदर्भ

SHA-256 हैश ऑब्जेक्ट पर कन्स्ट्रक्टर और मेथड:

पैरामीटर / मेथड
प्रकार
विवरण
data (positional)
bytes
हैश करने के लिए प्रारंभिक डेटा — निर्माण के तुरंत बाद update(data) कॉल करने के समान
.update(data)
bytes
हैश स्थिति में अतिरिक्त बाइट्स जोड़ें — खंडित इनपुट के लिए कई बार कॉल किया जा सकता है
.digest()
→ bytes
कच्चे 32-बाइट बाइनरी डाइजेस्ट को लौटाता है — HMAC इनपुट, बाइनरी प्रोटोकॉल, Base64 एन्कोडिंग के लिए उपयोग करें
.hexdigest()
→ str
64-वर्ण का लोअरकेस हेक्स स्ट्रिंग लौटाता है — चेकसम और सत्यापन के लिए मानक प्रतिनिधित्व
.copy()
→ hash object
वर्तमान हैश state का clone लौटाता है — शुरू से दोबारा हैश किए बिना अलग-अलग डाइजेस्ट निकालने देता है
hashlib.sha256()
constructor
CPython पर OpenSSL द्वारा समर्थित नया SHA-256 हैश ऑब्जेक्ट बनाता है — 3.9+ पर usedfips=True FIPS-अनुमोदित एल्गोरिदम तक सीमित करता है

कुंजी-युक्त हैशिंग के लिए hmac.new() पैरामीटर:

पैरामीटर
प्रकार
विवरण
key
bytes
गोपनीय कुंजी — bytes होनी चाहिए, str नहीं
msg
bytes | None
प्रमाणित करने के लिए प्रारंभिक संदेश — डिफ़ॉल्ट रूप से None, बाद में update() कॉल किया जा सकता है
digestmod
str | callable
हैश एल्गोरिदम: hashlib.sha256 या स्ट्रिंग "sha256" पास करें

cryptography लाइब्रेरी — SHA-256 का वैकल्पिक API

cryptography पैकेज अपने hazmat primitives के माध्यम से SHA-256 के लिए एक भिन्न API प्रदान करता है। जब केवल हैश की आवश्यकता हो तो मैं इसका उपयोग शायद ही करता हूं — hashlib सरल है और इसकी कोई बाहरी निर्भरता नहीं है। लेकिन यदि आपका प्रोजेक्ट पहले से cryptography पर TLS, X.509, या सममित एन्क्रिप्शन के लिए निर्भर है, तो इसके हैश API का उपयोग करने से सब कुछ एक ही लाइब्रेरी में रहता है और एक समान त्रुटि प्रबंधन मिलता है।

Python 3.9+ — cryptography लाइब्रेरी के साथ SHA-256
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend

digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
digest.update(b"deployment-v4.2.1")
result = digest.finalize()  # कच्चे 32 bytes

print(result.hex())  # 64-char hex string
# a8f5f167f44f4964e6c998dee827110c3f1de4d0280c68cba98cf70b4b5157db
चेतावनी:cryptography लाइब्रेरी के लिए pip install cryptography आवश्यक है। हैश ऑब्जेक्ट एकल-उपयोग है: .finalize() दूसरी बार कॉल करने पर AlreadyFinalized त्रुटि उत्पन्न होती है। यदि आपको हैश स्थिति को अलग करने की ज़रूरत है तो finalize से पहले .copy() उपयोग करें।

फ़ाइल और API प्रतिक्रिया से डेटा हैश करना

दो परिदृश्य बार-बार आते हैं: रिलीज़ आर्टिफैक्ट सत्यापित करने के लिए डिस्क पर फ़ाइल हैश करना, और कैश कुंजी के रूप में उपयोग करने या webhook सत्यापन के लिए HTTP प्रतिक्रिया बॉडी हैश करना।

फ़ाइल पढ़ें → SHA-256 निकालें → तुलना करें

Python 3.9+ — त्रुटि प्रबंधन के साथ कॉन्फ़िग बैकअप हैश करें
import hashlib
import sys

def hash_file_safe(filepath: str) -> str | None:
    """उचित त्रुटि प्रबंधन के साथ फ़ाइल हैश करें।"""
    try:
        h = hashlib.sha256()
        with open(filepath, "rb") as f:
            for chunk in iter(lambda: f.read(16384), b""):
                h.update(chunk)
        return h.hexdigest()
    except FileNotFoundError:
        print(f"त्रुटि: {filepath} नहीं मिली", file=sys.stderr)
        return None
    except PermissionError:
        print(f"त्रुटि: {filepath} के लिए पढ़ने की अनुमति नहीं", file=sys.stderr)
        return None

result = hash_file_safe("/etc/nginx/nginx.conf")
if result:
    print(f"SHA-256: {result}")

HTTP प्रतिक्रिया → कैश कुंजी के लिए बॉडी हैश करें

Python 3.9+ — API प्रतिक्रिया हैश करें
import hashlib
import urllib.request
import json

def fetch_and_hash(url: str) -> tuple[dict, str]:
    """API से JSON प्राप्त करें और डेटा तथा उसका SHA-256 हैश दोनों लौटाएं।"""
    try:
        with urllib.request.urlopen(url, timeout=10) as resp:
            body = resp.read()
            content_hash = hashlib.sha256(body).hexdigest()
            data = json.loads(body)
            return data, content_hash
    except urllib.error.URLError as exc:
        raise ConnectionError(f"{url} प्राप्त करने में विफल: {exc}") from exc

# प्रतिक्रिया सामग्री पर आधारित कैश कुंजी
data, digest = fetch_and_hash("https://api.exchange.internal/v2/rates")
print(f"Response hash: {digest[:16]}...")
print(f"EUR/USD: {data.get('rates', {}).get('EUR', 'N/A')}")

त्वरित एकबारगी जांच के लिए, ToolDeck का SHA-256 जनरेटर पूरी तरह आपके ब्राउज़र में चलता है — कोई कोड की आवश्यकता नहीं।

कमांड-लाइन SHA-256 हैशिंग

कभी-कभी किसी घटना या डिप्लॉयमेंट के दौरान टर्मिनल में त्वरित हैश की आवश्यकता होती है। Python के hashlib मॉड्यूल में कोई अंतर्निर्मित CLI उपकमांड नहीं है (जैसे python3 -m json.tool), लेकिन आप एक-लाइनर या सिस्टम टूल का उपयोग कर सकते हैं।

bash — कमांड लाइन से स्ट्रिंग हैश करें
# Python एक-लाइनर
echo -n "deployment-v4.2.1" | python3 -c "import hashlib,sys; print(hashlib.sha256(sys.stdin.buffer.read()).hexdigest())"

# macOS / BSD
echo -n "deployment-v4.2.1" | shasum -a 256

# Linux (coreutils)
echo -n "deployment-v4.2.1" | sha256sum

# OpenSSL (क्रॉस-प्लेटफ़ॉर्म)
echo -n "deployment-v4.2.1" | openssl dgst -sha256
bash — फ़ाइल हैश करें
# रिलीज़ tarball हैश करें
sha256sum release-v4.2.1.tar.gz
# या
openssl dgst -sha256 release-v4.2.1.tar.gz

# ज्ञात चेकसम के विरुद्ध सत्यापित करें
echo "a8f5f167f44f4964e6c998dee827110c release-v4.2.1.tar.gz" | sha256sum -c -
# release-v4.2.1.tar.gz: OK
नोट:कमांड लाइन पर स्ट्रिंग हैश करते समय हमेशा echo -n (कोई अनुगामी नई लाइन नहीं) उपयोग करें। सामान्य echo \n जोड़ता है, जो हैश बदल देता है। यही मुख्य कारण है कि लोगों को Python और शेल के बीच अलग-अलग हैश मिलते हैं।

उच्च-प्रदर्शन विकल्प — OpenSSL और pycryptodome के साथ hashlib

CPython पर, hashlib.sha256() पहले से OpenSSL की C-level implementation use करता है, इसलिए यह fast है — आधुनिक hardware पर आमतौर पर 500+ MB/s।

यदि SHA-256 हैशिंग आपके प्रोफ़ाइलर में दिखती है — मान लीजिए आप CI पाइपलाइन में हज़ारों फ़ाइलों के चेकसम निकाल रहे हैं या उच्च-थ्रूपुट API गेटवे में हर अनुरोध बॉडी हैश कर रहे हैं — तो दो विकल्प हैं: hashlib कॉलिंग पैटर्न अनुकूलित करें, या SHA-3 और BLAKE2 भी कवर करने वाले एकीकृत crypto API के लिए pycryptodome पर स्विच करें:

bash — pycryptodome इंस्टॉल करें
pip install pycryptodome
Python 3.9+ — pycryptodome के साथ SHA-256
from Crypto.Hash import SHA256

h = SHA256.new()
h.update(b"deployment-v4.2.1")
print(h.hexdigest())
# a8f5f167f44f4964e6c998dee827110c3f1de4d0280c68cba98cf70b4b5157db

उच्च-थ्रूपुट समानांतर फ़ाइल हैशिंग के लिए, बड़े खंड आकार और थ्रेडिंग के माध्यम से Python ओवरहेड कम करने से अधिक लाभ मिलता है:

Python 3.9+ — hashlib के साथ बैच फ़ाइल हैशिंग
import hashlib
import os
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor

def hash_file(path: Path) -> tuple[str, str]:
    """एकल फ़ाइल हैश करें और (path, hex digest) लौटाएं।"""
    h = hashlib.sha256()
    with open(path, "rb") as f:
        for chunk in iter(lambda: f.read(65536), b""):  # 64 KB खंड
            h.update(chunk)
    return str(path), h.hexdigest()

def hash_directory(directory: str, pattern: str = "*.tar.gz") -> dict[str, str]:
    """थ्रेड का उपयोग करके सभी मेल खाती फ़ाइलें समानांतर में हैश करें।"""
    files = list(Path(directory).glob(pattern))
    results = {}
    with ThreadPoolExecutor(max_workers=os.cpu_count()) as pool:
        for path, digest in pool.map(hash_file, files):
            results[path] = digest
    return results

# सभी रिलीज़ आर्टिफैक्ट समानांतर में हैश करें
checksums = hash_directory("/var/releases", "*.tar.gz")
for path, digest in checksums.items():
    print(f"{digest}  {path}")

8 KB के बजाय 64 KB खंड उपयोग करने से Python-से-C कॉल की संख्या 8 गुना कम होती है। थ्रेड यहां अच्छा काम करते हैं क्योंकि C-स्तरीय हैशिंग के दौरान GIL मुक्त होता है — बाधा CPU नहीं बल्कि डिस्क I/O है।

सिंटैक्स हाइलाइटिंग के साथ टर्मिनल आउटपुट

rich लाइब्रेरी उपयोगी है जब आपको फ़ाइलों के एक समूह को सत्यापित करना हो और कच्चे हेक्स आउटपुट के बजाय प्रति फ़ाइल पास/फ़ेल स्थिति दिखाने वाली तालिका चाहिए।

bash — rich इंस्टॉल करें
pip install rich
Python 3.9+ — हैश सत्यापन के लिए rich आउटपुट
import hashlib
from pathlib import Path
from rich.console import Console
from rich.table import Table

console = Console()

def hash_and_display(files: list[str], expected: dict[str, str]) -> None:
    """फ़ाइलें हैश करें और रंग-कोडेड सत्यापन के साथ परिणाम प्रदर्शित करें।"""
    table = Table(title="SHA-256 Verification")
    table.add_column("File", style="cyan")
    table.add_column("SHA-256", style="dim", max_width=20)
    table.add_column("Status")

    for filepath in files:
        h = hashlib.sha256()
        with open(filepath, "rb") as f:
            for chunk in iter(lambda: f.read(8192), b""):
                h.update(chunk)
        digest = h.hexdigest()

        name = Path(filepath).name
        status = "[green]✓ OK[/green]" if expected.get(name) == digest else "[red]✗ MISMATCH[/red]"
        table.add_row(name, f"{digest[:16]}...", status)

    console.print(table)

# उपयोग
expected_checksums = {
    "api-gateway-v3.1.tar.gz": "a8f5f167f44f4964...",
    "worker-v3.1.tar.gz": "7d3f8c2a1b9e4f5d...",
}
hash_and_display(
    ["/var/releases/api-gateway-v3.1.tar.gz", "/var/releases/worker-v3.1.tar.gz"],
    expected_checksums,
)
नोट:Rich आउटपुट केवल टर्मिनल प्रदर्शन के लिए है। लॉग फ़ाइलों या API प्रतिक्रियाओं में ANSI एस्केप कोड न लिखें — console.print(data, highlight=False) से उन्हें हटाएं या Console(file=open(...)) से फ़ाइल में पुनर्निर्देशित करें।

बड़ी फ़ाइलों के साथ कार्य करना

खंडित .update() पैटर्न स्थिर मेमोरी उपयोग के साथ किसी भी आकार की फ़ाइलें संभालता है। बहुत बड़ी फ़ाइलों (कई-GB डिस्क छवियां, डेटाबेस बैकअप) के लिए, मुख्य चिंता मेमोरी से उपयोगकर्ता प्रतिक्रिया पर स्थानांतरित हो जाती है — 500 MB/s पर 10 GB हैश करने में अभी भी 20 सेकंड लगते हैं, और उस दौरान चुप्पी लोगों को चिंतित करती है।

Python 3.9+ — प्रगति रिपोर्टिंग के साथ बड़ी फ़ाइलें हैश करें
import hashlib
import os

def sha256_with_progress(filepath: str) -> str:
    """stderr पर प्रगति रिपोर्टिंग के साथ बड़ी फ़ाइल हैश करें।"""
    file_size = os.path.getsize(filepath)
    h = hashlib.sha256()
    bytes_read = 0

    with open(filepath, "rb") as f:
        while chunk := f.read(1 << 20):  # 1 MB खंड
            h.update(chunk)
            bytes_read += len(chunk)
            pct = (bytes_read / file_size) * 100
            print(f"\r  हैशिंग: {pct:.1f}% ({bytes_read >> 20} MB / {file_size >> 20} MB)",
                  end="", flush=True)

    print()  # प्रगति के बाद नई लाइन
    return h.hexdigest()

digest = sha256_with_progress("/mnt/backups/db-snapshot-2026-03.sql.gz")
print(f"SHA-256: {digest}")

NDJSON / JSON Lines — प्रत्येक रिकॉर्ड अलग से हैश करें

Python 3.9+ — NDJSON स्ट्रीम में अलग-अलग रिकॉर्ड हैश करें
import hashlib
import json

def hash_ndjson_records(filepath: str) -> dict[str, str]:
    """डुप्लीकेशन के लिए NDJSON फ़ाइल में प्रत्येक JSON रिकॉर्ड हैश करें।"""
    seen = {}
    with open(filepath, "r", encoding="utf-8") as f:
        for line_num, line in enumerate(f, 1):
            line = line.strip()
            if not line:
                continue
            try:
                record = json.loads(line)
                # हैश करने से पहले सामान्यीकृत करें: निर्धारक आउटपुट के लिए keys क्रमबद्ध करें
                canonical = json.dumps(record, sort_keys=True, separators=(",", ":"))
                digest = hashlib.sha256(canonical.encode("utf-8")).hexdigest()

                if digest in seen:
                    print(f"पंक्ति {line_num}: पंक्ति {seen[digest]} का डुप्लीकेट")
                else:
                    seen[digest] = line_num
            except json.JSONDecodeError:
                print(f"पंक्ति {line_num}: अमान्य JSON, छोड़ा गया")

    print(f"{line_num} पंक्तियां संसाधित, {len(seen)} अद्वितीय रिकॉर्ड")
    return seen

hash_ndjson_records("telemetry-events-2026-03.ndjson")
नोट:जब फ़ाइलें 50–100 MB से अधिक हों तो सरल hashlib.sha256(data) एकल-शॉट से खंडित .update() लूप पर स्विच करें। उस सीमा से नीचे, f.read() से पूरी फ़ाइल पढ़ना ठीक है — मेमोरी उपयोग लगभग फ़ाइल आकार के बराबर होगा।

सामान्य गलतियां

hashlib.sha256() को bytes के बजाय str पास करना

समस्या: hashlib.sha256('text') TypeError उत्पन्न करता है: हैश करने से पहले Unicode-objects को एन्कोड करना होगा। फ़ंक्शन को str नहीं बल्कि bytes चाहिए।

समाधान: पहले स्ट्रिंग एन्कोड करें: hashlib.sha256('text'.encode('utf-8'))। या हार्डकोडेड मानों के लिए b'' literal उपयोग करें।

Before · Python
After · Python
import hashlib
digest = hashlib.sha256("deployment-v4.2.1").hexdigest()
# TypeError: Unicode-objects must be encoded before hashing
import hashlib
digest = hashlib.sha256("deployment-v4.2.1".encode("utf-8")).hexdigest()
# सही — 64-char hex string लौटाता है
हस्ताक्षर सत्यापन के लिए hmac.compare_digest() के बजाय == का उपयोग करना

समस्या: == ऑपरेटर पहले असमान बाइट पर शॉर्ट-सर्किट करता है। आक्रमणकर्ता प्रतिक्रिया समय मापकर एक-एक बाइट करके सही हस्ताक्षर का अनुमान लगा सकता है।

समाधान: सभी सुरक्षा-संवेदनशील तुलनाओं के लिए hmac.compare_digest() उपयोग करें — यह असमानता चाहे कहीं भी हो, स्थिर समय में चलता है।

Before · Python
After · Python
received_sig = request.headers["X-Signature"]
expected_sig = hmac.new(key, body, hashlib.sha256).hexdigest()
if received_sig == expected_sig:  # टाइमिंग हमले के प्रति असुरक्षित
    process_webhook(body)
received_sig = request.headers["X-Signature"]
expected_sig = hmac.new(key, body, hashlib.sha256).hexdigest()
if hmac.compare_digest(received_sig, expected_sig):  # स्थिर-समय
    process_webhook(body)
कच्चे bytes के बजाय hex string को Base64-एन्कोड करना

समस्या: base64.b64encode(digest.hexdigest().encode()) 88-वर्ण की स्ट्रिंग उत्पन्न करता है — अपेक्षित 44 वर्ण से दोगुना। Base64-एन्कोडेड SHA-256 की अपेक्षा रखने वाले API इसे अस्वीकार कर देंगे।

समाधान: Base64-एन्कोडिंग से पहले .digest() (कच्चे bytes) कॉल करें, .hexdigest() (hex string) नहीं।

Before · Python
After · Python
import hashlib, base64
hex_str = hashlib.sha256(data).hexdigest()
b64 = base64.b64encode(hex_str.encode())  # 88 chars — गलत!
import hashlib, base64
raw = hashlib.sha256(data).digest()
b64 = base64.b64encode(raw)  # 44 chars — सही
हैश करने से पहले पूरी बड़ी फ़ाइल मेमोरी में लोड करना

समस्या: hashlib.sha256(open('large.iso', 'rb').read()) पूरी फ़ाइल मेमोरी में लोड करता है। 4 GB फ़ाइल के लिए केवल हैश निकालने में 4 GB RAM की आवश्यकता होती है।

समाधान: लूप और .update() से खंडों में पढ़ें। फ़ाइल आकार कुछ भी हो, मेमोरी उपयोग स्थिर रहता है।

Before · Python
After · Python
import hashlib
# पूरी 4 GB फ़ाइल मेमोरी में लोड होती है
digest = hashlib.sha256(open("disk.iso", "rb").read()).hexdigest()
import hashlib
h = hashlib.sha256()
with open("disk.iso", "rb") as f:
    for chunk in iter(lambda: f.read(8192), b""):
        h.update(chunk)
digest = h.hexdigest()  # स्थिर मेमोरी उपयोग

hashlib बनाम hmac बनाम विकल्प — त्वरित तुलना

मेथड
आउटपुट
कुंजी-युक्त
गति
फ़ाइल स्ट्रीमिंग
इंस्टॉलेशन आवश्यक
कस्टम प्रकार
hashlib.sha256()
hex / bytes
तेज़ (C/OpenSSL)
✓ update() द्वारा
नहीं (stdlib)
Manual encode()
hmac.new()
hex / bytes
तेज़ (C/OpenSSL)
✓ update() द्वारा
नहीं (stdlib)
Manual encode()
hashlib.file_digest()
hex / bytes
तेज़ (zero-copy)
✓ (अंतर्निर्मित)
नहीं (3.11+)
Manual encode()
cryptography hashes.SHA256()
bytes
तेज़ (OpenSSL)
✓ update() द्वारा
pip install
Manual encode()
subprocess openssl dgst
hex string
✗ / ✓
धीमा (fork)
✓ (OS-स्तर)
System openssl
Manual encode()
pyhashcat / custom
अलग-अलग
GPU-त्वरित
pip install
Manual encode()

सीधी हैशिंग के लिए — चेकसम, कैश कुंजी, सामग्री फ़िंगरप्रिंटिंग — hashlib.sha256() से काम चलाएं। जब गोपनीय कुंजी की आवश्यकता हो (webhooks, API हस्ताक्षर, टोकन प्रमाणीकरण) तो hmac.new() पर स्विच करें। cryptography लाइब्रेरी केवल तभी उपयोग करें जब आपका प्रोजेक्ट पहले से एन्क्रिप्शन या TLS के लिए इस पर निर्भर है — जब hashlib पहले से OpenSSL द्वारा समर्थित है, तो केवल हैशिंग के लिए C एक्सटेंशन निर्भरता जोड़ना अनावश्यक है।

क्या SHA-256 को डिक्रिप्ट किया जा सकता है? — हैशिंग बनाम एन्क्रिप्शन

संक्षिप्त उत्तर: नहीं। SHA-256 एक एकदिशीय फ़ंक्शन है। एल्गोरिदम अपरिवर्तनीय होने के लिए डिज़ाइन किया गया है — आप 256-बिट डाइजेस्ट से मूल इनपुट पुनर्निर्माण नहीं कर सकते। यह implementation की कमी नहीं है; यह hash function का mathematical property है। 256-बिट आउटपुट स्थान अत्यंत विशाल है (2256 संभावित मान), और फ़ंक्शन अपने 64 संपीड़न चक्रों के दौरान सूचना को त्याग देता है।

आक्रमणकर्ता कमज़ोर इनपुट (सामान्य पासवर्ड, छोटी स्ट्रिंग) के विरुद्ध ब्रूट-फ़ोर्स या शब्दकोश हमलों का प्रयास कर सकते हैं, लेकिन उचित एंट्रॉपी वाले किसी भी इनपुट के लिए — API कुंजी, यादृच्छिक टोकन, फ़ाइल सामग्री — वर्तमान हार्डवेयर से SHA-256 पलटना व्यावहारिक रूप से असंभव है। यदि आपको उलटा परिवर्तन चाहिए, तो सममित एन्क्रिप्शन उपयोग करें:

Python 3.9+ — एन्क्रिप्शन बनाम हैशिंग
# हैशिंग — एकदिशीय, मूल वापस नहीं मिल सकता
import hashlib
digest = hashlib.sha256(b"secret-config-value").hexdigest()
# digest से "secret-config-value" वापस पाने का कोई तरीका नहीं

# एन्क्रिप्शन — द्विदिशीय, कुंजी से डिक्रिप्ट किया जा सकता है
from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher = Fernet(key)
encrypted = cipher.encrypt(b"secret-config-value")
decrypted = cipher.decrypt(encrypted)
print(decrypted)  # b"secret-config-value" — मूल पुनर्प्राप्त

बिना इंस्टॉलेशन के त्वरित रूप से SHA-256 हैश उत्पन्न करने के लिए, ऑनलाइन टूल पूरी तरह आपके ब्राउज़र में चलता है।

Python में यह कैसे जांचें कि कोई स्ट्रिंग वैध SHA-256 हैश है

वैध SHA-256 हेक्स डाइजेस्ट ठीक 64 हेक्साडेसिमल वर्णों (0-9, a-f, A-F) का होता है। अविश्वसनीय इनपुट संसाधित करने से पहले त्वरित सत्यापन भ्रामक त्रुटियों को रोकता है।

Python 3.9+ — SHA-256 प्रारूप सत्यापित करें
import re

def is_sha256_hex(value: str) -> bool:
    """जांचें कि क्या कोई स्ट्रिंग SHA-256 hex digest प्रारूप से मेल खाती है।"""
    return bool(re.fullmatch(r"[a-fA-F0-9]{64}", value))

# परीक्षण मामले
print(is_sha256_hex("e3b0c44298fc1c149afbf4c8996fb924"
                     "27ae41e4649b934ca495991b7852b855"))  # True — रिक्त स्ट्रिंग का SHA-256
print(is_sha256_hex("e3b0c44298fc1c14"))                   # False — बहुत छोटा
print(is_sha256_hex("zzzz" * 16))                          # False — अमान्य hex वर्ण
नोट:यह केवल प्रारूप सत्यापित करता है, न कि हैश किसी विशेष इनपुट से निकाला गया था या नहीं। यह बताने का कोई तरीका नहीं है कि कोई 64-वर्ण हेक्स स्ट्रिंग "वास्तविक" SHA-256 डाइजेस्ट है या केवल यादृच्छिक हेक्स — SHA-256 का आउटपुट डिज़ाइन द्वारा यादृच्छिक डेटा से अप्रभेद्य है।

अक्सर पूछे जाने वाले प्रश्न

Python में SHA-256 से स्ट्रिंग को कैसे हैश करें?

स्ट्रिंग को बाइट्स में एन्कोड करके hashlib.sha256() कॉल करें। Python में स्ट्रिंग Unicode होती हैं, और हैश फ़ंक्शन कच्चे बाइट्स पर कार्य करते हैं, इसलिए पहले .encode("utf-8") कॉल करना अनिवार्य है। .hexdigest() मेथड 64-वर्ण का परिचित हेक्स स्ट्रिंग लौटाता है।

Python
import hashlib

api_key = "sk_live_9f3a7b2e1d4c"
digest = hashlib.sha256(api_key.encode("utf-8")).hexdigest()
print(digest)
# e3b7c4a1f8d2...64 hex characters

क्या SHA-256 हैश से मूल टेक्स्ट वापस प्राप्त किया जा सकता है?

नहीं। SHA-256 एक one-way फ़ंक्शन है — यह किसी भी लंबाई के इनपुट को fixed 256-bit आउटपुट में बदलता है, और इसे उलटा नहीं किया जा सकता। कोई गणितीय उलटा नहीं है। आक्रमणकर्ता कमज़ोर इनपुट (छोटे पासवर्ड, सामान्य शब्द) के विरुद्ध ब्रूट-फ़ोर्स या रेनबो टेबल खोज का प्रयास कर सकते हैं, लेकिन उचित एंट्रॉपी वाले किसी भी इनपुट के लिए SHA-256 को पलटना व्यावहारिक रूप से असंभव है। यदि आपको उलटा परिवर्तन चाहिए, तो हैशिंग के बजाय एन्क्रिप्शन (AES-GCM, Fernet) का उपयोग करें।

.digest() और .hexdigest() में क्या अंतर है?

.digest() हैश के कच्चे 32 बाइट्स को bytes ऑब्जेक्ट के रूप में लौटाता है। .hexdigest() उसी डेटा को 64-वर्ण के लोअरकेस हेक्साडेसिमल स्ट्रिंग के रूप में एन्कोड करके लौटाता है। .digest() का उपयोग तब करें जब बाइनरी आउटपुट की आवश्यकता हो — HMAC में फ़ीड करने, Base64 एन्कोडिंग, या बाइनरी प्रोटोकॉल में लिखने के लिए। .hexdigest() का उपयोग लॉगिंग, डेटाबेस संग्रहण, या चेकसम तुलना के लिए करें।

Python
import hashlib

h = hashlib.sha256(b"deployment-v4.2.1")
print(len(h.digest()))     # 32 (bytes)
print(len(h.hexdigest()))  # 64 (hex characters)

Python में किसी फ़ाइल का SHA-256 चेकसम कैसे निकालें?

फ़ाइल को बाइनरी मोड में खोलें और .update() के साथ खंडों में हैशर को फ़ीड करें। Python 3.11+ पर और भी सरल API के लिए hashlib.file_digest() उपयोग करें। बड़ी फ़ाइलों पर f.read() कभी न कॉल करें — इससे पूरी फ़ाइल मेमोरी में लोड हो जाती है।

Python
import hashlib

def sha256_file(path: str) -> str:
    h = hashlib.sha256()
    with open(path, "rb") as f:
        for chunk in iter(lambda: f.read(8192), b""):
            h.update(chunk)
    return h.hexdigest()

print(sha256_file("release-v4.2.1.tar.gz"))

Python में HMAC-SHA256 हस्ताक्षर कैसे बनाएं?

digestmod के रूप में hashlib.sha256 के साथ hmac मॉड्यूल का उपयोग करें। गोपनीय कुंजी और संदेश bytes के रूप में पास करें। परिणाम एक कुंजी-युक्त हैश होता है जो अखंडता और प्रामाणिकता दोनों सिद्ध करता है — प्राप्तकर्ता को सत्यापन के लिए समान कुंजी की आवश्यकता होती है।

Python
import hmac
import hashlib

secret = b"webhook_secret_9f3a"
payload = b'{"event":"payment.completed","amount":4999}'
signature = hmac.new(secret, payload, hashlib.sha256).hexdigest()
print(signature)  # 64-char hex HMAC

यह कैसे जांचें कि कोई स्ट्रिंग वैध SHA-256 हेक्स डाइजेस्ट है?

SHA-256 हेक्स डाइजेस्ट ठीक 64 हेक्साडेसिमल वर्णों का होता है। रेगेक्स या सरल लंबाई + वर्ण जांच का उपयोग करें। रेगेक्स दृष्टिकोण सबसे पठनीय है।

Python
import re

def is_sha256(s: str) -> bool:
    return bool(re.fullmatch(r"[a-fA-F0-9]{64}", s))

print(is_sha256("e3b0c44298fc1c149afbf4c8996fb924"
                 "27ae41e4649b934ca495991b7852b855"))  # True
print(is_sha256("not-a-hash"))  # False

संबंधित टूल

DV
Dmitri VolkovDevOps Engineer & Python Automation Specialist

Dmitri is a DevOps engineer who relies on Python as his primary scripting and automation language. He builds internal tooling, CI/CD pipelines, and infrastructure automation scripts that run in production across distributed teams. He writes about the Python standard library, subprocess management, file processing, encoding utilities, and the practical shell-adjacent Python that DevOps engineers use every day.

MS
Maria Santosतकनीकी समीक्षक

Maria is a backend developer specialising in Python and API integration. She has broad experience with data pipelines, serialisation formats, and building reliable server-side services. She is an active member of the Python community and enjoys writing practical, example-driven guides that help developers solve real problems without unnecessary theory.