تولید و بررسی هش bcrypt
برای یک رمز عبور هش bcrypt بسازید یا ببینید رمزی با هش ذخیرهشده میخواند یا نه، بیآنکه چیزی از مرورگرتان بیرون برود.
تولید و بررسی آنلاین هش bcrypt
bcrypt الگوریتم هش رمز عبوری است که عمداً کند ساخته شده. یک هش عمومی مثل SHA-256 را میتوان میلیاردها بار در ثانیه محاسبه کرد و این دقیقاً همان چیزی است که کسی که از روی پایگاهداده لورفته رمز حدس میزند میخواهد؛ bcrypt هر حدس را گران میکند و ضریب هزینهاش اجازه میدهد این هزینه با سریعتر شدن سختافزار بالا برود. این الگوریتم پیشفرض PHP، Laravel، Ruby on Rails، Spring Security و بسیاری از فریمورکهای دیگر است.
این صفحه زبانه bcrypt در سازنده هش را باز میکند. کارهای رایج: ساختن نخستین حساب مدیر مستقیم در پایگاهداده، نوشتن داده آزمایشی، یا فهمیدن اینکه چرا کاربری نمیتواند وارد شود.
خواندن یک هش bcrypt
هش bcrypt همیشه ۶۰ نویسه است و هر چیزی را که برای بررسی بعدی لازم است با خود دارد. نمونه $2y$10$N9qo8uLOickgx2ZMRZoMye... را در نظر بگیرید:
| بخش | معنا |
|---|---|
$2y$ | پیشوند نسخه |
10 | ضریب هزینه: ۲ به توان ۱۰، یعنی ۱٬۰۲۴ دور آمادهسازی کلید |
| ۲۲ نویسه بعدی | salt تصادفی |
| ۳۱ نویسه آخر | خود هش |
انتخاب ضریب هزینه
در اینجا ضریب هزینه را میتوان از ۴ تا ۱۴ تنظیم کرد. هر یک واحد، کار را دو برابر میکند، پس هزینه ۱۲ چهار برابر کندتر از هزینه ۱۰ است. هدف این باشد که هش روی سرور خودتان کسری از یک ثانیه طول بکشد؛ ابزار هنگام کار پیشرفتش را نشان میدهد و همین حسی از تفاوت به شما میدهد. چون ضریب هزینه داخل هش ذخیره میشود، میتوانید بعداً آن را بالا ببرید و هر رمز عبور را در ورود بعدی صاحبش دوباره هش کنید.
محدودیت ۷۲ بایتی
bcrypt فقط ۷۲ بایت اول رمز عبور را میخواند. ورودی بلندتر رد نمیشود، بیصدا بریده میشود؛ بنابراین دو رمز بلند که ۷۲ بایت اولشان یکی است، هش یکسانی میسازند. نویسههای غیرانگلیسی در UTF-8 اغلب هر کدام دو تا چهار بایت میگیرند، پس این سقف زودتر از آنچه تعداد نویسهها نشان میدهد میرسد. ابزار هنگام تایپ بایتها را میشمارد و وقتی از ۷۲ بگذرید هشدار میدهد.
بررسی هش در کد
| زبان | ساختن | بررسی |
|---|---|---|
| PHP | password_hash($pw, PASSWORD_BCRYPT) | password_verify($pw, $hash) |
| Node.js (bcryptjs) | bcrypt.hash(pw, 10) | bcrypt.compare(pw, hash) |
| Python (bcrypt) | bcrypt.hashpw(pw, bcrypt.gensalt()) | bcrypt.checkpw(pw, hashed) |
برای ساختن رمزهای تصادفی جهت هش کردن، از سازنده رمز عبور استفاده کنید. برای چکسام فایل بهجای رمز عبور، همان SHA-256 را به کار ببرید.