Я запускаю следующую команду, чтобы сгенерировать ha sh для заданного пароля на терминале Linux.
openssl passwd -apr1 'Test123$Pwd'
$apr1$lWLP.Qc0$f/YdAVqsYFglu1EnLvzUS.
Я написал простой сценарий оболочки, который генерирует ha sh для заданного пароля. Вот мой сценарий оболочки: (Следует ли мне что-либо изменить здесь, в сценарии оболочки, чтобы включить одинарные кавычки вокруг $ 1)
echo -n "$ 1" | openssl passwd -apr1 $ 1
Теперь проблема в том, что когда я вызываю тот же сценарий оболочки из программы java, по какой-то причине, если пароль содержит символ доллара ($), он работает не так, как ожидалось .
Вот мой java код, который вызывает вышеуказанный сценарий оболочки:
void test(String password){
String script = "sh test.sh %s";
String command = String.format(script, password);
- - -
execute(command); // execute using ProcessBuilder
- - -
}
Приведенный выше код отлично работает, если пароль не содержит символа доллара. Но если пароль содержит $ char, он игнорирует текст после символа $ и генерирует ha sh для оставшегося пароля только до $.
Например: если я передаю пароль как Test $ Pwd
ha sh создается только для Test вместо Test $ Pwd
Я пытался установить одинарную кавычку в коде java, как показано ниже, но это тоже не сработало. При выполнении с использованием java по какой-то причине он по-прежнему генерирует ha sh для Test123 вместо Test123 $ Pwd
Измененный код java для включения одинарная кавычка, как показано ниже:
"sh test.sh '%s'";
Наблюдал за следующей командой в журналах, которая имеет одинарные кавычки, и это также не сработало, когда я запустил сценарий оболочки из java.
openssl passwd -apr1 'Test123$Pwd'
С терминала Linux, когда я запускаю сценарий, он работает нормально.
sh test.sh 'Test123$Pwd' -- this works
sh test.sh Test123$Pwd -- this doesn't work (generates hash only for Test123 even when run directly on the linux terminal)
Я не понимаю, нужно ли мне изменять сценарий оболочки или что-то в java?
Любые указатели были бы полезны. Спасибо!