скремблирующие буквы php - PullRequest
1 голос
/ 30 января 2009

я бы хотел все перемешать a-zA-Z так мир как

привет становится shrxs или же bhidf

остальное должно остаться прежним. например. "Привет, мир!" = "ksgii fishl!"

и т.д.

Ответы [ 4 ]

11 голосов
/ 30 января 2009

Неясно, предназначено ли это, чтобы быть обратимым, поэтому вот два альтернативных ответа.

«Привет», ставший «shrxs», подразумевает схему, которая выходит за рамки простого замещения ( Цезарь ) и, возможно, что-то вроде полиалфабетического шифра.

Но для простого шифра Цезаря вы можете использовать strtr

$plain="hello";
$cipher = strtr($plain, 
    "abcdefghijklmnopqrstuvwxyz", 
    "tuvhijkcwxyzldefgsmnopqrab");
echo $cipher;

будет отображать "cizze";

Если вам не нужно менять скремблирование и хотите что-то действительно случайное, попробуйте это

function random_char($matches)
{
   return chr(rand(ord('a'),ord('z')));
}

$plain="hello";

$random=preg_replace_callback(
           "{[a-z]}i",
           "random_char",
           $plain);

echo $random;

Здесь мы используем preg_replace_callback для замены каждого символа случайной альтернативой с помощью обратного вызова random_char.

5 голосов
/ 30 января 2009

Вам также может понравиться функция str_rot13 , которая также имеет то преимущество, что она обратима.

<?php
  var $foo = "hello world!";
  var $bar = str_rot13($foo); // $bar equals "uryyb jbeyq!"
  var $baz = str_rot13($bar); // $baz equals "hello world!"
?>
1 голос
/ 30 января 2009

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

$text = "Hello world!\n";
$text = preg_replace_callback(
        '/[a-zA-Z]/',
        create_function('$matches', 'return chr(rand(97,122));'),
        $text
    );
1 голос
/ 30 января 2009

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

Похоже, вы просто хотели узнать, как заменить только символы a-zA-Z. Так что, какой бы ни была ваша функция преобразования, вы можете сделать это одним из способов:

$result = preg_replace_callback('/[a-zA-Z]/', 'charTransform', $oldstring);

Затем определите преобразование как обратный вызов:

function charTransform($matches) {
   $oldchar = $matches[0];
   return strtolower($oldchar); // replace with whatever you want
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...