وقتی توی یه پروژه وب به رمزنگاری نیاز پیدا می کنی، اولین سؤال اینه که با چی انجامش بدی. crypto-js از همون کتابخانه هاییه که خیلی ها سال ها سراغش رفتن. الگوریتم های استاندارد رو با جاوااسکریپت خالص بهت می ده، بدون اینکه چیزی روی سرور نصب کنی یا ماژول بومی کامپایل کنی. هم توی مرورگر کار می کنه و هم توی Node.js.
کارهایی که باهاش می شه کرد کم نیست: هش با MD5، SHA-1، SHA-256 و SHA-512، ساخت HMAC برای امضای پیام، PBKDF2 برای مشتق کردن کلید از یه رمز، رمزنگاری متقارن با AES، DES، Triple DES، RC4 و Rabbit، و تبدیل داده بین Base64، Hex، UTF-8 و UTF-16. ساختارش ماژولاره، پس اگه فقط SHA-256 لازم داری، همون بخش رو بارگذاری کن و کل کتابخانه رو توی صفحه نکش.
یه مثال ملموس: قالب یا افزونه سفارشی وردپرسی که باید قبل از ارسال داده به یه API بیرونی، امضای HMAC بسازه. یا صفحه ای که باید یه رشته رو هش کنه و با خروجی سمت سرور مقایسه کنه. یا کدی که داده رمزشده با AES رو از یه سیستم دیگه می گیره و باید بازش کنه. برای این کارهای کوچیک و مشخص، crypto-js هنوز گزینه راحتیه.
یه چیز رو جدی بگیر: رمزنگاری سمت مرورگر جای امنیت سرور رو نمی گیره. هر کلیدی که توی جاوااسکریپت صفحه بذاری، برای هر بازدیدکننده قابل دیدنه. برای ذخیره رمز عبور کاربرها هم راه درستی نیست. اون کار باید سمت سرور و با هش مخصوص رمز عبور انجام بشه. نکته بعدی اینه که طبق توضیحات خود پروژه، توسعه فعالش متوقف شده و به جاش Web Crypto API مرورگر و ماژول crypto توی Node پیشنهاد می شه. پس اگه پروژه جدیدی می سازی و فقط هش یا AES ساده می خوای، اول اون ها رو بسنج. Web Crypto توی مرورگر فقط روی بستر امن (HTTPS) در دسترسه. crypto-js هم همون جاهایی به کار میاد که این شرط رو نداری یا کد قدیمی بهش وابسته هست.
نسخه های رسمی و بدون تغییر crypto-js توی مخزن دانلود ما هم هست. اگه دسترسی به npm یا CDN های خارجی قطع یا کند بود، می تونی فایل رو از همین جا برداری و روی هاست خودت بذاری.
راهنمای استفاده
استفاده از crypto-js توی یه صفحه معمولی ساده هست و ابزار بیلد نمی خواد.
- فایل کتابخانه رو با کد آماده پایین همین صفحه به صفحه یا قالبت اضافه کن. بهتره روی هاست خودت باشه تا به CDN خارجی وابسته نشی.
- اسکریپت crypto-js باید قبل از کد خودت لود بشه، وگرنه شیء CryptoJS هنوز وجود نداره و خطا می گیری.
- بعد از لود، همه چیز زیر شیء سراسری CryptoJS قرار می گیره. مثلاً CryptoJS.SHA256 برای هش، CryptoJS.HmacSHA256 برای HMAC و CryptoJS.AES.encrypt و CryptoJS.AES.decrypt برای رمزنگاری و رمزگشایی.
- خروجی ها اغلب شیء هستن. با toString می تونی اون ها رو به رشته تبدیل کنی و با CryptoJS.enc.Base64 یا CryptoJS.enc.Hex قالب خروجی رو مشخص کنی.
توی وردپرس، فایل رو با wp_enqueue_script از داخل قالب یا افزونه خودت بارگذاری کن. هندل crypto-js رو هم توی وابستگی های اسکریپت خودت بذار تا ترتیب لود درست بشه. اگه پروژه ات با npm و باندلر کار می کنه، بسته crypto-js رو نصب کن و فقط ماژول های لازم رو import کن تا حجم خروجی کمتر بشه.
قبل از انتشار روی نسخه آزمایشی تست کن، مخصوصاً اگه داده رمزشده باید با سمت PHP یا یه سرویس دیگه سازگار باشه. توی AES اگه به جای کلید خام یه رمز متنی بدی، کتابخانه خودش کلید رو می سازه و نتیجه با تنظیمات سمت PHP یکی نمی شه، مگه اینکه کلید و IV رو صریح بدی.