جدول رنگین‌کمانی
حفاظت در برابر جدول‌های رنگین کمانی

یک جدول رنگین کمانی در مقابل هش‌های یکطرفه که شامل سالت (salt) بزرگ می‌باشند بی تأثیر است. برای مثال یک هش کد را در نظر بگیرید که با استفاده از دنبال کردن تابع روبرو تولید شده‌است. (که در آن "||" الحاق اپراتور است):
saltedhash(password)=hash(password||salt)
یا
saltedhash(password)=hash(hash(password)||salt)
سالت ولیو پنهان نیست و شاید بصورت تصادفی ساخته و با هش کد ذخیره شود. یک مقدار زیادی از سالت ولیو از حملات پیش پردازش جلوگیری می‌کند، که شامل جدول‌های رنگین کمانی نیز می‌باشد و اطمینان حاصل می‌کند که پسورد کاربران به‌طور منحصر به فردی هش شده (ریز شده) است. به این معنی که دو کاربر با پسوردی یکسان هش‌های متفاوتی خواهند داشت. (با فرض اینکه از سالت‌های متفاوتی استفاده شده‌است). برای رسیدن به نتیجه ای موفق مهاجم باید همهٔ جدول‌ها را برای هر سالت ولیو (میزان سالت) ممکن پیش پردازش کند. سالت باید به اندازهٔ کافی بزرگ باشد وگرنه مهاجم می‌تواند یک جدول برای هر سالت ولیو ایجاد کند. برای پسوردهای قدیمی یونیکس(unix) از سالت ۱۲ بیتی استفاده می‌شد؛ و این نیاز به ۴۰۹۶ عدد جدول داشت، که یک افزایش هزینهٔ قابل توجهی برای مهاجم داشت، ولی با توجه به هارد درایوهای (دیسک‌های سخت) ترابایتی غیر عملی نیز نبود. روش‌های SHA2-crypt و bcrypt که در LINUX و BSD Unixes و سولاریس استفاده می‌شوند سالت ۱۲۸ بیتی دارند. این سالت ولیوی بزرگ حمله در مقابل این سیستم‌ها را برای تقریباً هر مقدار کد (اینجا منظور از مقدار طول کد است) غیرقابل نفوذ می‌کند. حتی اگر مهاجم می‌توانست یک میلیون جدول در ثانیه ایجاد کند، باز هم او نیاز به میلیون‌ها سالت داشت تا جدول هارا برای همهٔ سالت‌های ممکن بسازد.
تکنیک دیگری که به جلوگیری از حمله‌های پیش پردازشی کمک می‌کند، بسط دادن کلیدی (key stretching) می‌باشد. وقتی از بسط دادن استفاده می‌شود، سالت، کد و بعضی از هش ولیوهای واسطه توسط تابع درهم ساز اصولی، چندین بار به اجرا در می‌آیند تا زمان محاسبهٔ مورد نیاز را برای هش کردن (خرد کردن) هر کد افزایش دهند. برای مثال MD5-CRYPT از ۱۰۰۰ لوپ (حلقه) تکراری استفاده می‌کند که به‌طور مداوم (پشت سر هم) سالت، کد و هش ولیوی واسطه را به تابع درهم ساز MD5 اصلی خود بازمی‌گرداند. هش کد کاربری دنباله سالت ولیو (که پنهان نیست) و هش نهایی می‌باشد. این زمان اضافه برای کار مورد توجه قرار نمی‌گیرد چون آن‌ها باید فقط چندین ثانیه صبر کنند هر دفعه که وارد سیستم می‌شوند. از طرفی بسط دادن تأثیرات حملهٔ بروت فورس را نیز در تناسب با تعداد تکرارها کاهش می‌دهد، زیرا تعداد تلاش‌هایی را که یک مهاجم می‌تواند در زمان داده شده مشخصی داشته باشد کاهش می‌دهد. این ویژگی‌ها در MD5 CRYPT و BYCRYPT اجرا شده‌اند. همچنین به مقدار زیادی زمان مورد نیاز را برای ایجاد یک پیش پردازش افزایش می‌دهد، اما به دلیل عدم وجود سالت این اتفاق تنها یک بار نمی‌تواند روی دهد.
یک رویکرد متناوب به دلیل تقویت کلیدی (key strengthening)، کلید را با یک سالت تصادفی گسترش می‌دهد. اما سپس (برخلاف عملکرد بسط کلیدی) بصورتی این سالت را حذف می‌کند. این هم مهاجمین و هم کاربران را مجبور به بکاربردن یک جستجوی بروت فورس برای سالت ولیو می‌کند. اگرچه مقاله ای که بسط دادن کلید را معرفی کرده بود به این تکنیکی که پیشتر توضیح دادیم (تقویت کلیدی) نیز اشاره کرده بود، ولی نام دیگری به آن داده بود. اصطلاح تقویت کلیدی در حال حاضر گاهی (شاید بصورت غلط) برای بسط کلیدی نیز استفاده می‌شود.
جدول‌های رنگین کمانی و سایر حملات پیش پردازشی در مقابل کد (پسورد)هایی که شامل سمبل‌ها یا علامت‌هایی خارج از حلقهٔ پیش فرض هستند یا آن‌هایی که بلندتر از پیش پردازش‌های مهاجمین هستند عمل نمی‌کنند. اگرچه جدول‌ها می‌توانند با راه‌های مشترکی که کاربرها انجام می‌دهند، برای انتخاب یک پسورد ایمن تر نیز ساخته شوند، راه‌هایی مانند:اضافه کردن یک عددیا مولفهٔ مخصوص به پسورد. به دلیل سرمایه‌گذاری قابل ملاحظه در پروسهٔ محاسبه کردن، جدول‌های رنگین کمانی که بالای ۱۴ خانه در طولشان دارند هنوز رایج نیستند؛ بنابراین انتخاب یک پسوردی که بیشتر از ۱۴ مولفه دارد ممکن است مهاجم را به روش بروت فورس متوسل کند.
تلاش‌های مخصوص و متمرکزی که بر روی LM هش (LM hash) تمرکز کرده و یک الگوریتم هش قدیمی استفاده شده توسط شرکت ماکروسافت همگی در دسترس عموم قرار دارند. هش LM منحصراً آسیب‌پذیر می‌باشد، زیرا پسوردها با بیش از ۷ مولفه، به دو بخش شکسته می‌شوند؛ که هر کدام از آن‌ها بصورت جداگانه هش شده (خرد شده) اند.انتخاب یک پسوردی که دارای ۱۵ مولفه یا بیشتر می‌باشد می‌تواند ضمانت کند که در این صورت هش LM ایجاد نخواهد شد.