Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie nie losowych stringow
Forum PHP.pl > Forum > PHP
Jabol
Możecie bez strachu przejśc tutaj: http://forum.php.pl/viewtopic.php?p=31706#31706 ;P
[php:1:725d22549f]<?php

$hashes = array();

function get_string()
{
static $string, $depth, $init;
if( ! $init )
{
$init = true;
$string = array( chr( 1 ), chr( 1 ), chr( 1 ), chr( 1 ) );
$depth = 4;
}
else
{
if( ( $char = ++ord( $string[ $depth - 1 ] ) ) > 255 )
{
$string[ $depth - 1 ] = chr( 1 );
for( $i = $depth - 1; $i > 0; $i-- )
if( ++ord( $string[ $i - 1 ] ) > 255 )
{
$string[ $i - 1 ] = chr( 1 );
if( ( $i - 2 == 0 ) && ( ++ord( $string[ 0 ] ) > 255 ) )
{
$string[ ++$depth - 1 ] = chr( 1 );
break;
}
else
$string[ $i - 2 ] = chr( ord( $string[ $i ] ) ++ );
}
else
break;
}
else
$string[ $depth - 1 ] = chr( $char );
}
return implode( '', $string );
}

do
$hashes[ md5( ( $string = get_string() ) ) ] = $string;
while( sizeof( $hashes ) <= pow( 16, 32 ) );

$fd = fopen( 'hashtable', 'w' );
fputs( $fd, serialize( $hashes ) );
fclose( $fd );

?>[/php:1:725d22549f]niech ktoś to przetestuje, może najpierw tylko funkcje get_string(); pisalem bez testowania z glowy, wiec nie wiem czy dziala.
Seth
Cytat
Fatal error: Can't use function return value in write context in d:wwwhtable.php on line 16

smile.gif
Jabol
hmmm[php:1:62b5670084]<?php

$hashes = array();

function get_string()
{
static $string, $depth, $init;
if( ! $init )
{
$init = true;
$string = array( chr( 1 ), chr( 1 ), chr( 1 ), chr( 1 ) );
$depth = 4;
}
else
{
if( ( $char = ( ord( $string[ $depth - 1 ] ) ) + 1 ) > 255 )
{
$string[ $depth - 1 ] = chr( 1 );
for( $i = $depth - 1; $i > 0; $i-- )
if( ( ord( $string[ $i - 1 ] ) + 1 ) > 255 )
{
$string[ $i - 1 ] = chr( 1 );
if( ( $i - 2 == 0 ) && ( ( ord( $string[ 0 ] ) + 1 ) > 255 ) )
{
$string[ ++$depth - 1 ] = chr( 1 );
break;
}
else
$string[ $i - 2 ] = chr( ( ord( $string[ $i ] ) + 1 ) );
}
else
break;
}
else
$string[ $depth - 1 ] = chr( $char );
}
return implode( '', $string );
}

do
$hashes[ md5( ( $string = get_string() ) ) ] = $string;
print $string. "n";//debbuging
while( sizeof( $hashes ) <= pow( 16, 32 ) );

$fd = fopen( 'hashtable', 'w' );
fputs( $fd, serialize( $hashes ) );
fclose( $fd );

?>[/php:1:62b5670084]
Seth
Cytat


:?

Jak bede mial wiecej czasu to napisze jakas funkcje tworzaca stringi.

P.S. Zamiast tworzenia calej tablicy i potem zapisywania jej do pliku lepeiej zrobic tak, ze podczas tworzenia klucza zostaje on automatycznie zapisany do pliku do nowej lini <hash>=<wartosc>. Gdyz zawsze mozna wtedy przerwac bez utraty poprzednich wynikow.
Jabol
Cytat
Cytat

co to za cytat?
Seth
wynik get_string()
Jabol
hmmm
a przeanalizujmy kod (troche zmieniony ;P ):[php:1:21720c74fc]<?php

$hashes = array();

function get_string()
{
static $string, $depth, $init;
if( ! $init )//jezeli nie ma zapoczatkowanego to zrob to
{
$init = true;
$string = array( chr( 1 ), chr( 1 ), chr( 1 ), chr( 1 ) );//ustaw na 1,1,1,1 poniewaz ponizszy kod wymaga conajmniej 4 znakow
$depth = 4;
}
else//jezeli zapoczatkowane
{
if( ( $char = ( ord( $string[ $depth - 1 ] ) ) + 1 ) > 255 )//jezeli ostatni znak powiekszony o 1 przekracza pule ascii
{
$string[ $depth - 1 ] = chr( 1 );//zmien ostatni znak na pierwszy w ascii
for( $i = $depth - 1; $i > 0; $i-- )//dla kazdego znaku blizej poczatku sprawdz, czy nie przekracza ascii
if( ( ord( $string[ $i - 1 ] ) + 1 ) > 255 )//jezeli tak
{
$string[ $i - 1 ] = chr( 1 );//zmien ten znak na pierwszy w ascii
if( ( $i - 2 == 0 ) && ( ( ord( $string[ 0 ] ) + 1 ) > 255 ) )//jezeli znak przed nim jest pierwszym znakiem i przekracza pule
{
$string[ ++$depth - 1 ] = chr( 1 );//zwieksz dlugosc stringow
$string[ 0 ] = chr( 1 );//zmien pierwszy znak na ascii 1
break;//skoncz petla
}
else//jezeli nie
$string[ $i - 2 ] = chr( ( ord( $string[ $i ] ) + 1 ) );//zwieksz znak przed ostatnim znakiem, zeby po 1,1,1,255 dawalo 1,1,2,1 a nie 1,1,1,1
}
else//jezeli nie przekracza puli asci
{
$string[ $i ] = ord( $string[ $i - 1 ] ) + 1;//zwieksz go o 1
break;//i zakoncz petle
}
}
else//jezeli nie to
$string[ $depth - 1 ] = chr( $char );//zwieksz ten znak
}
return implode( '', $string );//wiadomo
}
//dalej wiadomo
do
{
$hashes[ md5( ( $string = get_string() ) ) ] = $string;
print $string. "n";//debbuging
}
while( sizeof( $hashes ) <= pow( 16, 32 ) );

$fd = fopen( 'hashtable', 'w' );
fputs( $fd, serialize( $hashes ) );
fclose( $fd );

?>[/php:1:21720c74fc]Może dojrzycie błąd?

ps. zastanawiam się, czy nie przenieść do php? conajmniej ostatnich paru postów

//edit, juz sie nie zastanawiam ;P
post nawiazuje dohttp://forum.php.pl/viewtopic.php?t=4985
Seth
Ma moze ktos link skad mozna sciagnac slowniki ?
Chodzi mi tylko o same wyrazy.

Ostatnio patrzylem i le zajmuje stworzenie tablicy z hashami tak jak to proponowales Jabol. Przetestowalem to na pliku z adresami proxy, ktory posiadal ok 700 000 adresow zajelo niecale 2 sekundy !

A moze ktos juz napisal funkcje do tworzenia wszystki mozilwych slow do okreslonej dlugosci znakow (znaki z przedzialu: 32-126 i 128-254 kodu asci) ? smile.gif
Jabol
Seth, mój skrypt ma w założeniach, że długość jest nieskończona tongue.gif. Jedzie aż bedzie miał gotowe
Na linuxie (może na win, też jest, nie wiem, nie znam się) można by czytać z /dev/random cały czas.
Seth
tylko, ze caly czas ten kod zwraca to:  smile.gif
Jabol
Cytat
w założeniach
:wink:

a tak wogole umiescilem go tu, żeby ktoś mi pomógł...
uboottd
Tak w ogole to jest zatrudnianie zolwia do wyscigow dragsterow. Poszukaj libgmp i napisz to sobie w C. Z ta biblioteka to beda trzy-cztery linijki kodu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.