2009-08-08 12 views
33

cat /dev/urandom es siempre una forma divertida de crear caracteres de desplazamiento en la pantalla, pero produce demasiados caracteres no imprimibles.Cómo base64 codificar/dev/random o/dev/urandom?

Hay una manera fácil de codificarlo en la línea de comandos de tal manera que todos sus resultados sean caracteres legibles, base64 o uuencode, por ejemplo.

Tenga en cuenta que prefiero soluciones que no requieren la creación de archivos adicionales.

+14

Definitivamente eres inusual en tu definición de "diversión". –

Respuesta

44

¿Qué pasa algo parecido

cat /dev/urandom | base64 

cual da (muchas) cosas por el estilo

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 

O, sin la (inútil) cat + tubería:

base64 /dev/urandom 

(Mismo tipo de salida ^^)


EDIT: también puede --wrap usuario la opción de base64, para evitar tener "líneas cortas":

base64 --wrap=0 /dev/urandom 

Esto eliminará envoltura, y obtendrá "pantalla completa" pantalla ^^

+0

wow ... Me siento mareado ahora. –

+19

"Todo lo que veo ahora es rubia, morena, pelirroja". – alexanderpas

+0

@Stefano: yo también :-D; @alexanderpas: si ver caracteres de desplazamiento al azar te hace ver ese tipo de personajes, tal vez debería ver personajes al azar con mayor frecuencia ^^ –

4

Por lo tanto, lo que está mal con

cat /dev/urandom | uuencode - 

?

fijo después del primer intento no funcionó en realidad ... :: suspiro ::

BTW-- Muchas utilidades UNIX utilizan '-' en lugar de un nombre de archivo en el sentido de "usar la entrada estándar".

+0

no sabía acerca de la opción de guión. gracias por enseñarme eso;) – alexanderpas

+0

(en realidad, el guion significa stdout en este caso) Uso inútil de 'cat' - haz esto en su lugar:' uuencode/dev/random -' –

17

Varias personas han sugerido cat ting y tuberías a través de base64 o uuencode. Un problema con esto es que no puede controlar la cantidad de datos que se leerán (continuará para siempre, o hasta que presione ctrl + c). Otra posibilidad es usar el comando dd, que le permitirá especificar cuántos datos leer antes de salir. Por ejemplo, para leer 1kb:

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

Otra opción es la tubería al comando strings que puede dar más variedad en su salida (caracteres no imprimibles se descartan ninguna carrera de menos 4 caracteres imprimibles [por defecto] son mostrados). El problema con strings es que muestra cada "ejecución" en su propia línea.

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

(por supuesto, se puede reemplazar el comando completo con

strings /dev/urandom 

si no quiere que se detenga nunca).

Si quieres algo muy funky, pruebe uno de:

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

O ' la cabeza -c 100', por ejemplo, imprimiría los primeros 100 bytes del archivo. –

+0

Si usa cadenas, también puede eliminar las líneas nuevas con una tubería adicional: 'cadenas/dev/urandom | perl -pe 's/\ n //' ' – mivk

1

Usted puede hacer más cosas interesantes con tuberías FIFO de Bash:

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

Trate

xxd -ps /dev/urandom 

xxd(1)

+0

Esto producirá hexadecimal/base16 no base64 –

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

Esa es la forma incorrecta de hacerlo. No es Base64, la conversión no tiene dos símbolos, por lo que se parece más a Base62 y, por lo tanto, los valores decodificados van a estar sesgados, por ejemplo. no tan aleatorio – ydroneaud

3

Ya hay varias buenas respuestas sobre cómo codificar base64 datos aleatorios (es decir cat /dev/urandom | base64). Sin embargo, en el cuerpo de su pregunta elabores:

... codificar [urandom] en la línea de comandos de tal manera que todos los de su salida son caracteres legibles, base 64 o uuencode por ejemplo.

Teniendo en cuenta que en realidad no necesita base 64 analizable y simplemente quieren que sea fácil de leer, me gustaría sugerir

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

base64 sólo se da salida a los caracteres alfanuméricos y símbolos (+ dos y/por defecto) . [:graph:] coincidirá con cualquier ascii imprimible que no sea de espacios en blanco, incluidos muchos símbolos/signos de puntuación que carecen de base64. Por lo tanto, usar tr -dC '[:graph:]' dará como resultado una salida más aleatoria y una mejor eficiencia de entrada/salida.

A menudo utilizo < /dev/random stdbuf -o0 tr -Cd '[:graph:]' | stdbuf -o0 head --bytes 32 para generar contraseñas seguras.

+0

uso inútil de cat (UUoC) - considere en su lugar 'tr -dC '[: graph:]' RubyTuesdayDONO