bash - ¿Cómo base64 codificar/dev/random o/dev/urandom?
linux uuencode (7)
cat /dev/urandom
siempre es una forma divertida de crear caracteres de desplazamiento en la pantalla, pero produce demasiados caracteres no imprimibles.
¿Hay alguna 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.
¿Qué tal algo así como
cat /dev/urandom | base64
Lo que da (muchas) cosas como
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 el (inútil) cat + pipe:
base64 /dev/urandom
(Mismo tipo de salida ^^)
EDITAR: también puede usar la opción --wrap
de base64
, para evitar tener "líneas cortas":
base64 --wrap=0 /dev/urandom
Esto eliminará la envoltura y obtendrá una pantalla de "pantalla completa" ^^
Entonces, ¿qué está mal con
cat /dev/urandom | uuencode -
?
Solucionado después de que el primer intento no funcionó realmente ... :: suspiro ::
BTW-- Muchas utilidades de Unix usan ''-'' en lugar de un nombre de archivo para significar '''' usar la entrada estándar ''''.
Puedes hacer más cosas interesantes con los tubos FIFO de BASH:
uuencode <(head -c 200 /dev/urandom | base64 | gzip)
Varias personas han sugerido catálogos 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 te permitirá especificar la cantidad de datos que se leerán antes de salir. Por ejemplo, para leer 1kb:
dd if=/dev/urandom bs=1k count=1 2>/dev/null | base64
Otra opción es canalizar al comando de strings
que puede dar más variedad en su salida (los caracteres no imprimibles se descartan, se muestran las ejecuciones de al menos 4 caracteres imprimibles [de forma predeterminada]). El problema con las 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, puede reemplazar todo el comando con
strings /dev/urandom
si no quieres que se detenga)
Si quieres algo realmente funky, prueba uno de los siguientes:
cat -v /dev/urandom
dd if=/dev/urandom bs=1k count=1 2>/dev/null | cat -v
Ya hay varias buenas respuestas sobre cómo codificar base64 datos aleatorios (es decir, cat /dev/urandom | base64
). Sin embargo, en el cuerpo de tu pregunta elaboras:
... codificar [urandom] en la línea de comandos de tal manera que todo su resultado sean caracteres legibles, base64 o uuencode, por ejemplo.
Dado que en realidad no se necesita parseable base64 y solo quiero que sea legible, sugeriría
cat /dev/urandom | tr -dC ''[:graph:]''
base64
solo genera caracteres alfanuméricos y dos símbolos (+ y / de forma predeterminada). [: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, el uso de tr -dC ''[:graph:]''
dará como resultado una salida más aleatoria y una mejor eficiencia de entrada / salida.
A menudo uso < /dev/random stdbuf -o0 tr -Cd ''[:graph:]'' | stdbuf -o0 head --bytes 32
< /dev/random stdbuf -o0 tr -Cd ''[:graph:]'' | stdbuf -o0 head --bytes 32
para generar contraseñas seguras.
cat /dev/urandom | tr -dc ''a-ZA-Z0-9''