Нет ограничений на пароль. Если они могут напечатать это со своей клавиатуры, независимо от того, какую региональную клавиатуру они используют. Возможно, вы захотите ввести минимальную длину, такие параметры, как минимум одно число и один специальный символ, но без ограничения.
Относительно вашего второго вопроса. Я бы реализовал это путем создания отдельных полей для повышения надежности пароля. Например, сейчас у вас есть два поля, которые относятся к паролю: salt, password_md5. Позже скажем, что вы хотите использовать sha256. Создайте новое поле с именем password_sha256. Когда пользователь входит в систему, сначала проверьте password_sha256. Если это поле пустое, проверьте password_md5. Если это соответствует, у вас есть пароль в виде простого текста, введенный пользователем. Затем вы можете сгенерировать пароль sha256 (я также сбросил бы соль для хорошей меры) и сохранить новое значение. Затем я бы пропустил значение в password_md5, чтобы никто не мог отменить это, чтобы получить пароль.
Лично я бы выбрал лучший хэш, который может использовать ваш язык, и использовал бы его. Важно обеспечить соблюдение политики минимального пароля - не имеет значения, насколько безопасен хэш, когда пароль «1234», - и заполнить хэш случайным символом, чтобы избежать атак по словарю.