2013-05-30 4 views
0

У меня есть ниже выход отображается на моем экране, который присваивается переменнойИзвлечение данных из выходного

<pre> 
$content = First Name: ajkhfsadf 
Last Name: asdfasf 
password: jkasdfhasdf2234h234j23 (encrypted. variable length) 
objectClass: asdfjkashdf 
</pre> 

вышеуказанных строк в выходных данных может изменить порядок. Есть ли способ получить только поле пароля и заменить его на **?

У меня есть статическое обходное решение, которое требует от меня предварительного выбора слов, но оно не работает с кодом, так как выходные строки могут быть динамическими по порядку.

$word1 = "password: "; 
$word2 = "objectClass"; 
$word3 = "Password: ******** \n"; 
$between=substr($contents, strpos($contents, $word1), strpos($contents, $word2) - strpos($contents, $word1)); 
$output = str_replace($between,$word3,$contents); 

Есть ли способ, чтобы иметь возможность выбрать пароль строку только и заменить зашифрованный пароль с * независимо от его положения на выходе?

+0

Вы делаете это так, чтобы в вашем текстовом поле отображалось только поле * для поля пароля? просьба уточнить! –

+0

Да, это правильно, так как я не хочу раскрывать пароль, даже если он зашифрован. – user2280769

ответ

3
$string = preg_replace('/Password: .*/', 'Password: ********', $string); 
+0

+1, потому что это намного проще, чем мой ответ. Желание я знал регулярное выражение:/ – rath

+0

Я не думаю, что есть функция, называемая replace_regexp в php. Я получаю ошибку функции. Call to undefined function replace_regexp() – user2280769

+0

Brain fart, это preg_replace – Barmar

0

Вы используете PHP explode. Я предполагаю, что вы прочитали весь вывод за один раз и сохраните его в переменной $var.

Сначала вы взорваетесь $var, используя линию разрыва \n в качестве делиметра. Теперь у вас есть все строки отдельно.

Теперь вы зацикливаете строки, дополнительно взрывая каждый на : и проверяя первый компонент вашего нового массива, чтобы узнать, соответствует ли он password. Восстановите массив (с implode), и все готово.

Бонус: При замене всех символов $password звездой вы даете злоумышленнику преимущество знать, сколько символов имеет пароль (если ваша схема шифрования не выводит строки фиксированной длины).

+0

Я буду заменять его только 8 звездами независимо от длины зашифрованного пароля или удалять это поле вместе. – user2280769

0

В ответ на ваш комментарий, то вам не нужно, чтобы скрыть это значение при извлечении его из базы данных, или который когда-либо хранения вы используете;

то, что вам нужно сделать, это сделать ваше текстовое поле выглядеть в HTML:

<input type="password" value="...Stored Password..."> 

Будьте осторожны, хотя, это не очень безопасно!

что вы пытаетесь достичь в конечном счете?

+0

Ответ исходит из сценария оболочки, который запускается на машине. Я просто пытаюсь замаскировать поле пароля с помощью ***** – user2280769

Смежные вопросы