تولیدکننده هش SHA-256
تولید هش SHA-256 از هر متنی
متن ورودی
هش SHA-256
هش SHA-256 اینجا نمایش داده میشود…
هش SHA-256 چیست؟
SHA-256 (الگوریتم هش امن ۲۵۶ بیتی) یک تابع هش رمزنگاری از خانواده SHA-2 است که NIST در سال ۲۰۰۱ بهعنوان بخشی از FIPS 180-2 (بهروزرسانی شده در FIPS 180-4) منتشر کرد. برای هر ورودی — یک کاراکتر تنها، یک فایل چند گیگابایتی، یا یک رشته خالی — SHA-256 یک خلاصه ثابت ۲۵۶ بیتی (۳۲ بایت) تولید میکند که معمولاً بهصورت ۶۴ کاراکتر هگزادسیمال نمایش داده میشود. SHA-256 پرکاربردترین تابع هش در سیستمهای تولیدی امروز است و زیربنای زنجیرههای گواهی TLS، اثبات کار Bitcoin، یکپارچگی زیرمنبع (SRI)، و فرآیندهای امضای کد است.
SHA-256 یک تابع یکطرفه است: محاسبه هش از یک ورودی سریع است (صدها مگابایت در ثانیه روی سختافزار مدرن)، اما معکوسسازی فرآیند — یافتن ورودی که یک هش مشخص تولید میکند — از نظر محاسباتی ناممکن است. این خاصیت که مقاومت پیشتصویر نامیده میشود، SHA-256 را برای هش رمز عبور (هنگامی که با salt و key-stretching ترکیب شود)، امضاهای دیجیتال، و تأیید یکپارچگی داده مناسب میکند. برخلاف MD5 و SHA-1، هیچ حمله تصادم یا پیشتصویری در برابر SHA-256 کامل نشان داده نشده است.
خانواده SHA-2 شامل شش نوع است: SHA-224، SHA-256، SHA-384، SHA-512، SHA-512/224، و SHA-512/256. SHA-256 روی کلمات ۳۲ بیتی با ۶۴ دور در هر بلوک کار میکند و برای پردازندههای ۳۲ بیتی بهینه شده است. SHA-512 از کلمات ۶۴ بیتی و ۸۰ دور استفاده میکند که میتواند روی پلتفرمهای ۶۴ بیتی سریعتر باشد. برای اکثر کاربردها که یک خلاصه ۲۵۶ بیتی کافی است، SHA-256 توصیه پیشفرض NIST، IETF، و CA/Browser Forum باقی میماند.
چرا از تولیدکننده SHA-256 آنلاین استفاده کنیم؟
تولید هش SHA-256 معمولاً به یک دستور ترمینال یا چند خط کد نیاز دارد. این ابزار مبتنی بر مرورگر به شما امکان میدهد بدون نصب هیچ چیز، تغییر محیط، یا نوشتن اسکریپت، خلاصههای SHA-256 محاسبه کنید.
موارد استفاده SHA-256
مقایسه انواع خانواده SHA-2
SHA-256 به خانواده SHA-2 تعریف شده در FIPS 180-4 تعلق دارد. هر نوع اندازه خلاصه، ویژگیهای عملکردی، و حاشیه امنیتی را با یکدیگر معامله میکند. جدول زیر تمام انواع SHA-2 را که احتمالاً با آنها روبهرو میشوید مقایسه میکند.
| نوع | اندازه خلاصه | طول Hex | اندازه بایت | بهترین کاربرد |
|---|---|---|---|---|
| SHA-256 | 256 bits | 64 hex chars | 32 bytes | TLS, blockchain, code signing, JWTs, SRI |
| SHA-224 | 224 bits | 56 hex chars | 28 bytes | Truncated SHA-256 — rare, specific compliance |
| SHA-384 | 384 bits | 96 hex chars | 48 bytes | Government / CNSS, higher collision margin |
| SHA-512 | 512 bits | 128 hex chars | 64 bytes | Digital signatures, HMAC with large keys |
| SHA-512/256 | 256 bits | 64 hex chars | 32 bytes | SHA-512 speed on 64-bit CPUs, 256-bit output |
SHA-256 در برابر SHA-1، MD5، و SHA-3
انتخاب الگوریتم هش مناسب به نیازهای امنیتی و محدودیتهای سازگاری شما بستگی دارد. SHA-256 نقطه عملی بهینه را اشغال میکند: امن، پشتیبانی جهانی (شامل Web Crypto API)، و برای اکثر بارهای کاری به اندازه کافی سریع. جدول مقایسه زیر ویژگیهایی را که هنگام انتخاب تابع هش بیشترین اهمیت دارند پوشش میدهد.
| ویژگی | SHA-256 | SHA-1 | MD5 | SHA-3-256 |
|---|---|---|---|---|
| Digest size | 256 bits (64 hex) | 160 bits (40 hex) | 128 bits (32 hex) | 256 bits (64 hex) |
| Security status | Secure | Broken (2017) | Broken (2004) | Secure |
| Collision resistance | 2^128 operations | Practical attack | Practical attack | 2^128 operations |
| Block size | 512 bits | 512 bits | 512 bits | 1600 bits (sponge) |
| Rounds | 64 | 80 | 64 | 24 |
| Standard | FIPS 180-4 | FIPS 180-4 | RFC 1321 | FIPS 202 |
| Web Crypto API | Yes | Yes | No | No |
| Primary use today | TLS, blockchain, SRI | Legacy git only | Non-security checksums | Backup standard |
نحوه کارکرد داخلی SHA-256
SHA-256 ورودی را در بلوکهای ۵۱۲ بیتی (۶۴ بایت) از طریق ساختار Merkle–Damgård پردازش میکند. الگوریتم هشت کلمه وضعیت ۳۲ بیتی (H0–H7) را که از بخشهای کسری ریشههای دوم هشت عدد اول اول مشتق شدهاند مقداردهی اولیه میکند. هر بلوک از ۶۴ دور ترکیب عبور میکند که از عملیات بیتی (AND، XOR، NOT، چرخش راست، شیفت راست) و ۶۴ ثابت دور مشتق شده از ریشههای مکعبی ۶۴ عدد اول اول استفاده میکند.
SHA-256: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
(256 bits = 32 bytes = 64 hex characters)
| مرحله | توضیح |
|---|---|
| Padding | Append a 1-bit, then zeros until the message length is 448 mod 512. Append the original message length as a 64-bit big-endian integer. |
| Block splitting | Divide the padded message into 512-bit (64-byte) blocks. |
| Message schedule | Expand each 16-word (32-bit) block into 64 words using sigma functions with right-rotate and right-shift operations. |
| Compression | Process 64 rounds per block using Ch, Maj, and two Sigma functions with 64 round constants derived from cube roots of the first 64 primes. |
| Output | Concatenate the eight 32-bit state words (H0-H7) into a 256-bit (32-byte) digest, rendered as 64 hexadecimal characters. |
اثر بهمنی تضمین میکند که تغییر یک بیت در ورودی تقریباً ۵۰٪ از بیتهای خروجی را تغییر میدهد. این خاصیت، همراه با مقاومت تصادم 2^128، دلیل است که SHA-256 در سال ۲۰۲۶ توصیه پایه برای کاربردهای حساس به امنیت باقی میماند.
مثالهای کد SHA-256
SHA-256 بهصورت بومی در هر زبان و runtime اصلی موجود است. Web Crypto API آن را بدون هیچ کتابخانهای در مرورگرها فراهم میکند. مثالهای زیر الگوهای استفاده واقعی شامل مدیریت ورودی Unicode و هشگیری فایل را نشان میدهند.
// Works in all modern browsers and Node.js 18+
async function sha256(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-256', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha256('hello world')
// → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha256').update('hello world').digest('hex')
// → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"import hashlib
# Basic SHA-256 hash
result = hashlib.sha256(b'hello world').hexdigest()
print(result) # → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
# Hash a string (encode to bytes first)
text = 'café ☕'
hashlib.sha256(text.encode('utf-8')).hexdigest()
# → "3eb53e00aa1bb4b1e8aab1ab38e56e6b8fb0b20e1cf7e1d19f36e4fad2537445"
# Hash a file in chunks (memory-efficient)
with open('release.tar.gz', 'rb') as f:
sha = hashlib.sha256()
for chunk in iter(lambda: f.read(8192), b''):
sha.update(chunk)
print(sha.hexdigest())package main
import (
"crypto/sha256"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha256.Sum256(data)
fmt.Printf("%x\n", hash)
// → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
}# Using sha256sum (Linux) or shasum (macOS) echo -n "hello world" | sha256sum # → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 - # macOS echo -n "hello world" | shasum -a 256 # → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 - # Verify a file checksum echo "b94d27b... myfile.bin" | sha256sum -c # → myfile.bin: OK # Using openssl (cross-platform) echo -n "hello world" | openssl dgst -sha256 # → SHA2-256(stdin)= b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9