Aplicar una transformación en las contraseñas antes de incluirlas no hace daño directo a la seguridad siempre que sea inyectivo : dos contraseñas distintas antes de aplicar la transformación seguirán siendo distintas una vez que ambas se transformen. Su "cambio de caracteres" está bien para eso si lo hace correctamente (es decir, tenga cuidado de transformar un byte de valor 255 en un byte de valor 0 que "truncará" la contraseña).
Indirectamente , hay un poco de daño en el hecho de que su transformación adicional es un código adicional, por lo que la complejidad adicional, y la complejidad siempre es mala para la seguridad. Además, si la transformación es computacionalmente costosa, entonces está en desacuerdo con el conteo de iteraciones usado en PBKDF2 / bcrypt (es decir, tiene menos CPU disponible, por lo que debe usar un conteo de iteraciones más bajo).
Una transformación como la que usted imagina solo beneficia a la seguridad en la medida en que el atacante no la conoce, es decir, el atacante no hizo su tarea. Los atacantes básicos y de bajo poder que tuvieron suerte con un ataque de inyección SQL pueden, de hecho, carecer de conocimiento, pero estos atacantes no son los que dan miedo. Tu transformación adicional no disuadirá a los atacantes fuertes, y debes preocuparte por los atacantes fuertes.
Las transformaciones
aplicadas después de no tienen ninguna influencia en la seguridad, excepto si está utilizando algo como el hashing adicional, en cuyo caso solo está intentando crear una función hash personalizada que, como es habitual, es una mala idea Así que no lo hagas. La forma correcta de usar su CPU es no desperdiciarla en los cambios de carácter vudú y otros rituales; en su lugar, use su CPU para tener una cuenta de iteración bcrypt / PBKDF2 tan alta como sea tolerable para el rendimiento general de su aplicación.