Не має значення, де зберігаються зашифровані дані, важливо, як вони зашифровані.
Зашифровані розділи в web.config, як правило, шифруються API захисту даних , що зламати надзвичайно важко без шкоди для всієї машини. Ви також можете використовувати контейнер з ключами RSA, який подібний (важко дістати їх з машини).
Якщо ви хочете зберегти зашифровану рядок у DLL, це гарно, я думаю, хоча вона не є більш надійною, ніж зашифрований web.config (хтось може зазирнути в цю DLL за допомогою Reflector ), і очевидно важче змінити (ви мені потрібно перекомпілювати). Але знову ж таки, що набагато важливіше - це те, як генерувався той зашифрований рядок; імовірно, ви не використовуєте тих самих постачальників, що і для зашифрованого web.config, тож що ви використовуєте?
Схема шифрування настільки ж сильна, як приватний ключ або загальний секрет. Якщо цей ключ також зберігається у вашій збірці, то ви також можете взагалі не мати шифрування. Якщо вона зберігається у якійсь зовнішній базі даних, тоді виникає питання про те , як захищено рядок з'єднання цієї бази даних. Це дійсно може призвести лише до слабшої безпеки в цілому.
З іншого боку, якщо ви були постачальником послуг, а рядок з'єднання було зашифровано паролем користувача , то це було б більш безпечно, ніж використання статичного ключа машини. Знову ж таки, якщо ви використовуєте паролі користувачів для шифрування, навряд чи вам буде важко кодувати зашифровані дані у вашій збірці, оскільки їх потрібно генерувати та зберігати у відповідь на дії користувача (а не розробника).
Дійсно, я не можу придумати надто багато ситуацій, коли жорстке кодування (зашифрованого) рядка з'єднання в DLL є більш безпечним, ніж шифрування відповідного розділу web.config. У кращому випадку це просто додає незручностей, а в гіршому - це покладається на якусь незграбно написану власну безпеку, пронизану дірками. Зробіть собі прихильність і зробіть те, що рекомендує Microsoft - просто зашифруйте вашу web.config, якщо там є конфіденційні дані.