monnick schreef op zondag 27 augustus 2006 @ 15:41:
Een tijdje geleden heb ik in PHP een encrypt / decrypt tooltje gemaakt omdat ik het wel eens handig vind om paswoorden / (server)adressen op te slaan. Het is gebaseerd op de XOR techniek. Het werkt dmv een sleutel die gehashed word met sha1 om een betere sleutel te krijgen.
Duh, hij zegt het toch? Hij maakt een sleutel door de sha1 hash van een wachtwoord te nemen, en xor't de invoer daar mee:MarkvE schreef op maandag 28 augustus 2006 @ 10:56:
Ben wel benieuwd naar de methode waarop je dit hebt gemaakt, overweeg je misschien om de
source openbaar te maken?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| function xor_str($s, $k) { $t = ''; for($n = 0; $n < strlen($s); ++$n) $t .= chr(ord($s{$n}) ^ ord($k{$n%20})); return $t; } // Sleutel maken $key = pack("H*", sha1($_REQUEST['password'])); // Coderen $ciphertext = xor_str($_REQUEST['plaintext'], $key); echo 'Ciphertext: '; for($n = 0; $n < strlen($ciphertext); ++$n) printf('%08b', ord($ciphertext{$n})); echo "\n"; // Decoderen $plaintext = xor_str($ciphertext, $key); echo 'Plaintext: ', $plaintext, "\n"; |
Dit is de 'goede' implementatie. monnick mist in zijn code de conversie van hexadecimale representatie naar een 'binaire' string. Door de call naar pack weg te laten krijg je een versie die precies compatible is met monnick's script.
Gebruik dit soort code trouwens alsjeblieft niet zonder te begrijpen waarmee je bezig bent. Er is een goede reden dat de huidige encryptiestandaard (Rijndael) vijf jaar lang door experts in cryptografie nageplozen moest worden. Ga dus niet zelf zitten prutsen terwijl er gewoon modules als mcrypt voor PHP zijn, waarmee je sterke encryptie kant-en-klaar ter beschikking hebt.