Абсолютная оптимизация является неразрешимой проблемой, которая означает, нет никакой Машины Тьюринга (и, поэтому, никакая компьютерная программа), который может привести к оптимальной версии ЛЮБОЙ данной программы.
Некоторая простая оптимизация может быть (и, на самом деле), сделанный, но, в примерах Вы дали...
, Чтобы обнаружить, что Ваша первая программа всегда печатает нуль, компилятор должен был бы обнаружить, что x остается постоянным несмотря на все повторения цикла. Как может Вы объяснять (я знаю, это не лучшее слово, но я не могу придумать другого), это к компилятору?
, Как компилятор может знать, что StringBuilder является правильным инструментом для задания без КАКОЙ-ЛИБО ссылки на него?
В реальном приложении, если эффективность очень важна в части Вашего приложения, она должна быть записана на низкоуровневом языке как C. (Ха-ха, серьезно, я записал это?)
Эта статья о Усиление ключа может вам помочь. По сути, вы хотите сделать ключ более надежным (с большей энтропией, чем в пароле) и сделать его вывод из пароля надежно трудоемким.
Ну, так как ваш пост является общим, позвольте мне сказать несколько общих вещей :
MD5, SHA-0, SHA-1 - все битые хэши, и вы не должны использовать их для каких-либо криптографических целей, используйте SHA-2.
Как правило, вы должны использовать хорошо известные и задокументированные подходы к извлечение ключей из паролей (вы не указываете, какой язык, пожалуйста, скажите, какой из них вы используете).
При выполнении любого вида программирования безопасности самое важное, что нужно сделать, прежде чем что-либо делать, - строго задокументировать свой модель угроз ». По сути, это список всех атак, которые вы пытаетесь предотвратить, и того, как вы это будете делать. а также от каких атак вы не можете предотвратить. Это довольно весело, и вы узнаете обо всех атаках и других интересных вещах.
Ответ на ваш новый вопрос: вы определенно должны использовать что-то вроде PBKDF2 для генерации ключа.
Я предполагаю, что у вас будет пароль (не менее 10 символов с верхним нижним значением цифр и пунктуации, верно?), который затем сгенерирует ключ AES-256. Ключ будет использоваться для шифрования/дешифрования файла(ов). Вы хотите использовать что-то вроде PBKDF2, чтобы уменьшить возможность того, кто получит ваш файл, узнать ваш ключ/пароль путем перебора. Использование чего-то вроде PBKDF2 (и случайной соли!) увеличивает стоимость взлома шифрования файла.
Что я действительно рекомендую, так это использовать это в качестве игрушки, а не для защиты чего-то, что вам действительно важно. Если вы не эксперт по безопасности, вы будете делать ошибки, даже эксперты (и многие из них вместе) делают ошибки: http://www.sslshopper.com/article-ssl-and-tls-renegotiation-vulnerability-discovered.html