2009-08-08 8 views
33

cat /dev/urandom est toujours un moyen amusant de créer des caractères de défilement sur votre écran, mais produit trop de caractères non imprimables.Comment encoder en base64/dev/random ou/dev/urandom?

Y at-il un moyen facile de l'encoder sur la ligne de commande de telle sorte que toutes ses sorties sont des caractères lisibles, base64 ou uuencode par exemple.

Notez que je préfère les solutions qui ne nécessitent aucun fichier supplémentaire à créer.

+14

Vous êtes définitivement inhabituel dans votre définition de "fun". –

Répondre

44

Qu'en est-il quelque chose comme

cat /dev/urandom | base64 

Ce qui donne (beaucoup de) des trucs comme

hX6VYoTG6n+suzKhPl35rI+Bsef8FwVKDYlzEJ2i5HLKa38SLLrE9bW9jViSR1PJGsDmNOEgWu+6 
HdYm9SsRDcvDlZAdMXAiHBmq6BZXnj0w87YbdMnB0e2fyUY6ZkiHw+A0oNWCnJLME9/6vJUGsnPL 
TEw4YI0fX5ZUvItt0skSSmI5EhaZn09gWEBKRjXVoGCOWVlXbOURkOcbemhsF1pGsRE2WKiOSvsr 
Xj/5swkAA5csea1TW5mQ1qe7GBls6QBYapkxEMmJxXvatxFWjHVT3lKV0YVR3SI2CxOBePUgWxiL 
ZkQccl+PGBWmkD7vW62bu1Lkp8edf7R/E653pi+e4WjLkN2wKl1uBbRroFsT71NzNBalvR/ZkFaa 
2I04koI49ijYuqNojN5PoutNAVijyJDA9xMn1Z5UTdUB7LNerWiU64fUl+cgCC1g+nU2IOH7MEbv 
gT0Mr5V+XAeLJUJSkFmxqg75U+mnUkpFF2dJiWivjvnuFO+khdjbVYNMD11n4fCQvN9AywzH23uo 
03iOY1uv27ENeBfieFxiRwFfEkPDgTyIL3W6zgL0MEvxetk5kc0EJTlhvin7PwD/BtosN2dlfPvw 
cjTKbdf43fru+WnFknH4cQq1LzN/foZqp+4FmoLjCvda21+Ckediz5mOhl0Gzuof8AuDFvReF5OU 

Ou, sans (inutile) chat + pipe:

base64 /dev/urandom 

(Le même type de sortie ^^)


EDIT: vous pouvez également à l'utilisateur l'option --wrap de base64, pour éviter d'avoir « lignes courtes »:

base64 --wrap=0 /dev/urandom 

Cela permettra d'éliminer l'emballage, et vous obtiendrez écran « plein écran » ^^

+0

wow ... Je me sens étourdi maintenant. –

+19

"Tout ce que je vois maintenant est blonde, brune, rousse." – alexanderpas

+0

@Stefano: moi aussi :-D; @alexanderpas: si le fait de regarder des caractères de défilement aléatoires vous permet de voir ce genre de caractères, peut-être que je devrais regarder des caractères aléatoires plus souvent ^^ –

4

Alors, quel est le problème avec

cat /dev/urandom | uuencode - 

?

fixe après la première tentative ne fonctionne pas vraiment ... :: soupirent ::

BTW-- De nombreux utilitaires unix utilisent « - » à la place d'un nom de fichier signifie « utiliser l'entrée standard ».

+0

ne connaissait pas l'option de tiret. merci de m'avoir appris que;) – alexanderpas

+0

(en fait le tiret signifie stdout dans ce cas) Utilisation inutile de 'cat' - faites ceci à la place:' uuencode/dev/random -' –

17

Un certain nombre de gens ont suggéré cat ting et de la tuyauterie à travers base64 ou uuencode. Un problème avec ceci est que vous ne pouvez pas contrôler la quantité de données à lire (elle continuera indéfiniment, ou jusqu'à ce que vous appuyiez sur ctrl + c). Une autre possibilité consiste à utiliser la commande dd, qui vous permettra de spécifier la quantité de données à lire avant de quitter. Par exemple, pour lire 1kb:

dd if=/dev/urandom bs=1k count=1 2>/dev/null | base64 

Une autre option est de tuyau à la commande strings qui peut donner plus de variété à sa sortie (caractères non-imprimables sont éliminées, les séries de moins de 4 caractères imprimables [par défaut] sont affichés). Le problème avec strings est qu'il affiche chaque "exécution" sur sa propre ligne.

dd if=/dev/urandom bs=1k count=1 2>/dev/null | strings 

(bien sûr, vous pouvez remplacer si vous ne voulez pas à jamais arrêter la commande entière avec

strings /dev/urandom 

).

Si vous voulez quelque chose de vraiment génial, essayez l'une:

cat -v /dev/urandom 
dd if=/dev/urandom bs=1k count=1 2>/dev/null | cat -v 
+3

Ou ' head -c 100' par exemple imprimerait les 100 premiers octets du fichier. –

+0

Si vous utilisez des chaînes, vous pouvez également supprimer les nouvelles lignes avec un tuyau supplémentaire: 'strings/dev/urandom | perl -pe 's/\ n //' ' – mivk

1

Vous pouvez faire des choses plus intéressantes avec les tuyaux FIFO de BASH:

uuencode <(head -c 200 /dev/urandom | base64 | gzip) 
-1

Essayez

xxd -ps /dev/urandom 

xxd(1)

+0

Cela va produire hexadécimal/base16 pas base64 –

2
cat /dev/urandom | tr -dc 'a-ZA-Z0-9' 
+1

C'est la mauvaise façon de le faire. Ce n'est pas Base64, la conversion manque de deux symboles, donc c'est plus comme Base62 et donc les valeurs décodées vont être biaisées, par exemple. pas si aléatoire. – ydroneaud

3

Il existe déjà plusieurs bonnes réponses sur la manière de coder en base64 les données aléatoires (c.-à-d. cat /dev/urandom | base64). Cependant, dans le corps de votre question que vous développiez:

... encode [urandom] sur la ligne de commande de telle sorte que tous sa sortie sont des caractères lisibles, base64 ou uuencode par exemple.

Étant donné que vous ne souhaitez pas vraiment base64 analysable et que vous voulez juste qu'il soit lisible, je vous suggère

cat /dev/urandom | tr -dC '[:graph:]' 

base64 Seules les sorties des caractères alphanumériques et deux symboles (+ et/par défaut) . [:graph:] correspondra à tous les caractères ascii non-blancs imprimables, y compris de nombreux symboles/signes de ponctuation qui manquent à base64. Par conséquent, l'utilisation de tr -dC '[:graph:]' donnera une sortie plus aléatoire et aura une meilleure efficacité d'entrée/sortie.

J'utilise souvent < /dev/random stdbuf -o0 tr -Cd '[:graph:]' | stdbuf -o0 head --bytes 32 pour générer des mots de passe forts.

+0

utilisation inutile de chat (UUoC) - considérer à la place 'tr -dC '[: graph:]' RubyTuesdayDONO

Questions connexes