Кто знает PHP?

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Кто знает PHP?

Сообщение jangle » 01.05.2010 (Сб) 14:13

Помогите перевести код на VB

Код: Выделить всё
function tripcode($plain)
{
    $salt = substr($plain."H.",1,2);
    $salt = ereg_replace("[^\.-z]",".",$salt);
    $salt = strtr($salt,":;<=>?@[\\]^_`","ABCDEFGabcdef"); 
    return substr(crypt($plain,$salt),-10);
}


crypt - это функция шифрования DES?

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Кто знает PHP?

Сообщение FireFenix » 01.05.2010 (Сб) 14:38

Последний раз редактировалось FireFenix 01.05.2010 (Сб) 14:55, всего редактировалось 1 раз.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Кто знает PHP?

Сообщение Хакер » 01.05.2010 (Сб) 14:43

В VB строки юкниодные, а в PHP — ансишные. Давай на Си переведу.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Кто знает PHP?

Сообщение jangle » 01.05.2010 (Сб) 14:47

FireFenix писал(а):http://www.php.net/manual/en/function.crypt.php

Элементарно, Ватсон!


Спасибо FireFenix, буду разбираться!

Хакер писал(а):В VB строки юкниодные, а в PHP — ансишные. Давай на Си переведу.


Ну если не трудно, переведи. Про ансишные строки в PHP не знал :)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Кто знает PHP?

Сообщение jangle » 01.05.2010 (Сб) 15:19

Мне не непонятно это место

$salt = substr($plain."H.",1,2);

Почему текстовая переменная записана черех точку со строкой "H." ?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Кто знает PHP?

Сообщение Хакер » 01.05.2010 (Сб) 15:21

Точка — оператор конкатенации. И там должно быть "H..", иначе получится неправильный трипкод.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Кто знает PHP?

Сообщение Хакер » 01.05.2010 (Сб) 15:30

Получилось длинно и магик-кодингово:
Код: Выделить всё
inline char clean_salt_char(char c)
{
    if(c < '.' || c > 'z')
    {
        return '.';
    }
    else if(c < ':' || c > '`')
    {
        return c;
    }
    else
    {
         return c + (c < '[' ? 'A' - ':' : 'a' - '[');
    }
}

char* tripcode(const char* plain)
{
    char salt[3];
    switch(strlen(plain))
    {
    case 0:
        salt[0] = salt[1] = '.';
        break;
    case 1:
         salt[0] = 'H';
         salt[1] = '.';
    case 2:
         salt[0] = clean_salt_char(plain[1]);
         salt[1] = 'H'
         break;
    default:
         salt[0] = clean_salt_char(plain[1]);     
         salt[1] = clean_salt_char(plain[2]);
    }       
    char* ptr_to_buffer_with_result_allocated_inside_crypt_function;
    size_t size_of_buffer_with_result_allocated_inside_crypt_function;
    crypt(plain,
                salt,
                &ptr_to_buffer_with_result_allocated_inside_crypt_function,
                &size_of_buffer_with_result_allocated_inside_crypt_function);
     char* result = (char*)malloc(11);
     memcpy(result, ptr_to_buffer_with_result_allocated_inside_crypt_function + size_of_buffer_with_result_allocated_inside_crypt_function - 11, 11);
     function_that_should_free_buffer_allocated_in_crypt_function(ptr_to_buffer_with_result_allocated_inside_crypt_function);
     return result;
);

}

function tripcode($plain)
{
    $salt = substr($plain."H.",1,2);
    $salt = ereg_replace("[^\.-z]",".",$salt);
    $salt = strtr($salt,":;<=>?@[\\]^_`","ABCDEFGabcdef");
    return substr(crypt($plain,$salt),-10);
}
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Кто знает PHP?

Сообщение jangle » 01.05.2010 (Сб) 15:45

Хакер писал(а):Точка — оператор конкатенации. И там должно быть "H..", иначе получится неправильный трипкод.


Тоесть в PHP коде была ошибка?



Хакер писал(а):Получилось длинно и магик-кодингово:


А код правильно работает? Например при входном параметре "tripcode" какой у него трипкод получается?

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Кто знает PHP?

Сообщение FireFenix » 01.05.2010 (Сб) 17:44

jangle писал(а):Мне не непонятно это место
$salt = substr($plain."H.",1,2);
Почему текстовая переменная записана черех точку со строкой "H." ?

По дефолту crypt даёт DES c 2х байтной солью...

"H." добавляется только чтобы, если длина $plain < 2, то сгенерилось на основе "H."

Но т.к. используется выборка не substr($plain . 'H', 0, 2) то $plan должно содержать хотябы 1 символ
Последний раз редактировалось FireFenix 01.05.2010 (Сб) 17:54, всего редактировалось 2 раз(а).
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Кто знает PHP?

Сообщение Хакер » 01.05.2010 (Сб) 17:48

Правильнее вообще-то "H."


Правильно — H... Читай описание алгоритма генерации трипкода, что-ли. Потому что берётся второй и третий символ, и при пустой строке "H." не хватит, чтобы взять третий символ.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Кто знает PHP?

Сообщение Хакер » 01.05.2010 (Сб) 17:49

Правильнее вообще-то "H."


Правильно — H... Читай описание алгоритма генерации трипкода, что-ли. Потому что берётся второй и третий символ, и при пустой строке "H." не хватит, чтобы взять третий символ.

А код правильно работает? Например при входном параметре "tripcode" какой у него трипкод получается?

Без понятия, писал в форме ответа. Наверное правильно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Кто знает PHP?

Сообщение FireFenix » 01.05.2010 (Сб) 17:52

Хакер писал(а):
Правильнее вообще-то "H."


Правильно — H... Читай описание алгоритма генерации трипкода, что-ли. Потому что берётся второй и третий символ, и при пустой строке "H." не хватит, чтобы взять третий символ.

Беда, я забыл что substr в php отсчитывает с 0, а не как VB c 1 :evil:
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Кто знает PHP?

Сообщение Хакер » 01.05.2010 (Сб) 17:57

Стоило ли исправлять меня?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 50

    TopList