[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог-RSS] [Главная]

Файл: 1439661432542.jpg -(341 KB, 801x1167, 1439661432542.jpg)
341 No.175809  

Объясните дураку, по какому алгоритму из трипкода высчитывается то, что отображается в поле имени.

>> No.175810  

http://lurkmore.to/%D0%A2%D1%80%D0%B8%D0%BF%D0%BA%D0%BE%D0%B4

>> No.175816  

>>175810
Здорово. А про алгоритм-то есть что сказать?

>> No.175818  

>>175816
Там в статье целый пункт этому посвящен. Тебя к нему за ручку отвести?

>> No.175819  

>>175818
Давай, хоть кто-то меня за ручку подержит.

>> No.175821  
>"Old style" refers to the 2ch-style tripcodes that are in use on a wide variety of script, and is what most people use. The algorithm for these is sort of a mess. It is essentially a UNIX crypt() call, but with some weirdness to generate the needed salt value from the second and third characters of the tripcode string. (Using the second and third characters seems a bit like a mistake in the original algorithm, that was noticed too late for it to be changed.)
>For closer details, I'd have to recommend looking at the wakaba source after all (since I can't recall the exact details right now). Note, however, that the wakaba source might not handle weird special cases quite correctly. The futallaby source has an implementation closer to the original, but that one is REALLY horrible to understand.
>The Javascript one has such a big heap of weird code, because it has to include an implementation of the UNIX crypt() function. If you're coding in Perl or PHP, crypt() exists already so no need for that.
>"New style" would be any of the secure tripcode implementations people have done. Wakaba has one, h-cube's ochiba has one, and Shii has one too I think. These are not standardized, because they don't really need to be. Essentially what they do is use a better hashing function than crypt(), such as MD5 or SHA1, and combine the trip input with a secret string, so that people who don't know the secret can't try and brute-force the tripcodes at home. These are not portable across sites like old-style codes are, even if the sites run the same script (unless they share the secret string).
>> No.175824  

>>175809

#
# Tripocode in Perl
#
sub gentrip {
my($pass) = @_;
my $salt = substr($pass . "H.", 1, 2);
$salt =~ s/[^\.-z]/./g;
$salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
return substr(crypt($pass, $salt), -10);
}
print gentrip("fc1lWGjc"); # d4sLowpokE
>> No.175864  

>>175824
Ну это вообще перл.

>> No.175889  

>>175824
Я твоего перла не знаю, давай на чём-нибудь попроще вроде Си или VHDL.

>> No.175909  

>>175889

// gcc -std=gnu99 tripcode.c -lcrypt
#include <stdio.h>
#include <string.h>
#include <crypt.h>
const char *saltmap =
".............................................../0123456789ABCDEF"
"GABCDEFGHIJKLMNOPQRSTUVWXYZabcdefabcdefghijklmnopqrstuvwxyz....."
"................................................................"
"................................................................";
// pass should be html escaped and in sjis
char *tripcode(char *pass) {
char salt[12] = {0};
char *crypted;
  strncpy(salt, pass, 3);
strcat(salt, "H.");
memmove(salt, salt+1, 2);
salt[2] = '\0';
for (int i=0; i<2; i++)
salt[i] = saltmap[salt[i]];
  crypted = crypt(pass, salt);
return strndup((crypted+strlen(crypted)-10), 10);
}
// tripcode("fc1lWGjc") == "d4sLowpokE"
>> No.175910  

>>175909

>crypt.h

Даже не буду спрашивать, где скачать эту либу с оптимизацией под архитектуру моей машины.
мимопроходил

>> No.175917  

>>175910
http://pubs.opengroup.org/onlinepubs/9699919799/functions/crypt.html
Это часть POSIX, так что твоя стандартная библиотека должна это предоставлять. Но может понадобиться заменить #include <crypt.h> на:

#define _XOPEN_SOURCE
#include <unistd.h>
>> No.175918  

>>175910
Можешь взять DES_crypt() из OpenSSL — https://www.openssl.org/docs/manmaster/crypto/DES_crypt.html, там все оптимизировано и в меру портабельно.

>> No.175923  

>>175809
Конкретно в вакабе:

sub process_tripcode($;$$$$)
{
my ($name,$tripkey,$secret,$charset,$nonamedecoding)=@_;
$tripkey="!" unless($tripkey);
if($name=~/^(.*?)((?<!&)#|\Q$tripkey\E)(.*)$/)
{
my ($namepart,$marker,$trippart)=($1,$2,$3);
my $trip;
$namepart=decode_string($namepart,$charset) unless $nonamedecoding;
$namepart=clean_string($namepart);
if($secret and $trippart=~s/(?:\Q$marker\E)(?<!&#)(?:\Q$marker\E)*(.*)$//) # если надо безопасный трипкод и есть он
{
my $str=$1;
my $maxlen=255-length($secret);
$str=substr $str,0,$maxlen if(length($str)>$maxlen);
# $trip=$tripkey.$tripkey.encode_base64(rc4(null_string(6),"t".$str.$secret),"");
$trip=$tripkey.$tripkey.hide_data($1,6,"trip",$secret,1);
return ($namepart,$trip) unless($trippart); # вернуть сразу, если обычных трипов нет
}
# 2ch трипкоды высчитываются в Shift_JIS если возможно
eval 'use Encode qw(decode encode)';
unless($@)
{
$trippart=decode_string($trippart,$charset);
$trippart=encode("Shift_JIS",$trippart,0x0200);
}
$trippart=clean_string($trippart);
my $salt=substr $trippart."H..",1,2;
$salt=~s/[^\.-z]/./g;
$salt=~tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
$trip=$tripkey.(substr crypt($trippart,$salt),-10).$trip;
return ($namepart,$trip);
}
return clean_string($name) if $nonamedecoding;
return (clean_string(decode_string($name,$charset)),"");
}
>> No.175940  

>>175917
Вот за это - спасибо. Потому что при компиляции OpenSCADA выкидывало, что не найден хедер crypt.h и надо установить glibc, которая для IA64 более не выходит (говорят, что мёртвая архитектура, что странно, учитывая то, что они поддерживают действительно мёртвые PA-RISC и Alpha, в то время как итаниумы выпускаются и сейчас и для них выпускается энтерпрайзовое ПО - ODB, Java JRE/JDK и пр.).

>> No.175941  

>>175940

>не знать, что crypt.h был в юниксах уже тысячелетия и является дефолтным методом для login

Вот это странно.

>> No.175942  
>crypt.h

В смысле libcrypt.

>> No.175944  

>>175940
Только не забывай память освобождать после этого кода, ибо он писался за пять минут и там strndup делает скрытый от глаз malloc. И вообще перепиши лучше функцию так, чтобы она использовала тред-безопасную реализацию crypt и получала целевой буфер через аргументы от вызывающего кода, а не занималась аллокацией памяти сама.
Ну, и судя по коду из вакабы strcat(salt, "H."); надо заменить на strcat(salt, "H..");.

>> No.175953  

так за алгоритм-то кто-нибудь пояснит, или вы и дальше продолжите обсуждать стадию воровства кальсон?

>> No.175957  

>>175953
Тебе конкретные реализации привели на перле и сях. Тебе ещё найти в гугле реализацию crypt, а потом детально расписать алгоритм с блок-схемами, пояснениями и примерами, предварительно обучив тебя писать на питоне?

>> No.175960  

>>175957 это всё, конечно, было бы хорошо, если б спрашивалось о реализации

>> No.175961  

>>175957
А питон здесь причём? Если кодить не умеет, пусть тот же Си для начала освоит вместо того, чтобы сразу за что-то сложное хвататься.

>> No.175963  

>>175961

>А питон здесь причём?

бытиё определяет сознание: токарь не может поверить, что вытачиваемая им деталь родилась на бумаге. в его мировоззрении изначально эту деталь выточил из ничего высший токарь

>> No.175964  

>>175960
Алгоритм аналогичен традиционному UNIX crypt, который использовался для хэширования и хранения паролей в юникс-системах с конца семидесятых и до начала нулевых — https://en.wikipedia.org/wiki/Crypt_(C).
Сам алгоритм внутри основан на немного модифицированном DES и заворачивании его результата в base64.

Единственной особенностью является только необычное вычисление соли для алгоритма, да и тонкости с тем, что пароль должен быть в кодировке Shift JIS и после экранирования спецсимволов html. Все. Больше ничего необычного у этого алгоритма нет.

>> No.175965  

>>175961

>за что-то сложное хвататься.

Э? Ты про питон что ли?

>> No.175966  

>>175961
Питон в любом случае легче для освоения, чем Си, потому что не надо думать о памяти, о указателях, о типах, о преобразовании типов, о выравнивании в структурах, о математике указателей и неиллюзорной возможности благодаря ней оказаться в памяти совершенно не там, где ожидал, и еще о куче вещей, которые делают Си столь эффективным и близким к железу, но которые готовы оторвать ногу, руку, почку и глаз, если ими воспользоваться чуточку неправильно.

>> No.175967  

>>175966

> не надо думать о памяти, о указателях, о типах, о преобразовании типов, о выравнивании в структурах, о математике указателей

Не мусорить и класть всё на своё место - это ведь так сложно.

>> No.175968  

>>175967
Для мусора есть сборщик мусора! Не барское это дело — о мусоре задумываться.




[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог-RSS] [Главная]