Codegolf/wpa: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
(10 intermediate revisions by 2 users not shown) | |||
Line 9: | Line 9: | ||
==== C ==== | ==== C ==== | ||
main(c | i=63;main(c){while(i)isprint(c=getchar())&&putchar(c,--i);} | ||
(Merovius) | (Merovius) | ||
Line 21: | Line 21: | ||
==== Perl ==== | ==== Perl ==== | ||
perl - | perl -pe'y/ -~//cd'</dev/urandom|head -c63 | ||
(sECuRE) | (sECuRE) | ||
Line 27: | Line 27: | ||
==== Shell ==== | ==== Shell ==== | ||
</dev/urandom tr -dc [-~] | head - | </dev/urandom tr -dc "[ -~]" | head -c63 | ||
(koebi) | (koebi) | ||
Dann gekürzt zu: | Dann gekürzt zu (nur unter zsh): | ||
tr -dc \ -~</*/ur*|head -c63 | tr -dc \ -~</*/ur*|head -c63 | ||
(mxf, sECuRE und Merovius) | (mxf, sECuRE und Merovius) | ||
Wer sehr viel Zeit hat (man sollte sicher gehen, ein passendes locale (C funtkioniert) gesetzt zu haben): | |||
grep -Eao "[ -~]{63}" /*/ur* | |||
==== Haskell ==== | ==== Haskell ==== |
Latest revision as of 18:09, 26 August 2013
Die Problemstellung: Erzeuge (ggf. mit einem von stdin entgegengenommenem stream von random-bytes) eine WPA-Passphrase, d.h. 63 Zeichen printable ASCII.
Die Problemstellung ist aus folgender während eines Treffs in den IRC-Channel geposteten Frage entstanden:
23:55 <@joker> was benutze ich am besten um WLAN pws zu erstellen 23:56 <@joker> pwgen wäre ne möglichkeit, sei aber ja nicht soo sicher
Zwei Stunden später gab es dann einen Satz an Lösungen dafür im Channel. Hier nur die kürzesten Lösungen:
C
i=63;main(c){while(i)isprint(c=getchar())&&putchar(c,--i);}
(Merovius)
"Pure" Perl
perl -ne'/[ -~]/&&($i+=print$&)>63&&die' < /dev/urandom
(mxf)
Perl
perl -pe'y/ -~//cd'</dev/urandom|head -c63
(sECuRE)
Shell
</dev/urandom tr -dc "[ -~]" | head -c63
(koebi)
Dann gekürzt zu (nur unter zsh):
tr -dc \ -~</*/ur*|head -c63
(mxf, sECuRE und Merovius)
Wer sehr viel Zeit hat (man sollte sicher gehen, ein passendes locale (C funtkioniert) gesetzt zu haben):
grep -Eao "[ -~]{63}" /*/ur*
Haskell
import Data.Char fkt = do c <- getChar if (((ord c) >= 33) && ((ord c) <= 126)) then putChar c else return() fkt main = do fkt
(joker)