read /dev/urandom 3
Lo anterior no funciona ... ¿Cómo puedo leer bytes aleatorios /dev/urandom
en bash?
read /dev/urandom 3
Lo anterior no funciona ... ¿Cómo puedo leer bytes aleatorios /dev/urandom
en bash?
random="$(dd if=/dev/urandom bs=3 count=1)"
$()
funciona?It treats the output of a command like a variable.
realidad te refieres a una cuerda, ¿verdad?$()
es bastante universal, no específico de bash. Por cierto, tenga cuidado de no encontrarse con limitaciones sobre qué caracteres puede almacenar el shell en las variables, por ejemplo, la versión de bash que probé deja fuera los nulos (\ x00) de la cadena.(Si desea caracteres de guión literales, el carácter de guión debe ir al final de la cadena como se hizo anteriormente, en lugar de
*-_
).Y para explicar lo que se hace debido al conjunto de comandos anterior:
head -c 500 /dev/urandom
: Obtenga los primeros 500 caracteres (bytes) de/dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Elimina todos los caracteres, excepto los especificados,'a-zA-Z0-9~!@#$%^&*_-'
de la salida del primer comando.fold -w 3
: Formatee la salida del segundo comando de modo que tenga 3 caracteres por línea.head -n 1
: Muestra la primera línea del resultado del tercer comando enstdout
.fuente
fold -w 3 | head -n 1
por ahead -c 3
si no se necesita la nueva línea char al final.Illegal byte sequence
error. Para arreglar eso, use la codificación "C"; cambie el comando a:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
Por favor verifique
man od
.Puedes usar, por ejemplo
od -vAn -N4 -tu4 < /dev/urandom
para generar números aleatorios decimales sin signo de 4 bytes.
fuente
Aquí hay uno que crea cadenas de base64, tenga en cuenta que a pesar de que están limitadas a cadenas de base64, el relleno se elimina de ellas, por lo que no puede decodificarlas, probablemente no lo necesitará de todos modos.
Reemplace
5
con la cantidad de caracteres que desea.Sin embargo, si necesita decodificarlos por alguna razón, muévase
base64
al final de la tubería. Luego recopilará 5 caracteres de urandom y codificará en base64 con el relleno correcto, pero la cadena final puede ser más larga de lo que desea debido al relleno.fuente
cat
leerá mucho más que una cantidad dada deN
caracteres, y puede agotar la entropía. Respuesta no útilcat
ambosbase64
yhead
puede tomar un nombre de archivo como argumento, en este caso funciona y no debería agotar la entropía. Ver stackoverflow.com/questions/10031344/…Prueba esto:
dd if=/dev/urandom bs=1 count=3
Si quieres poner el resultado en $ variable:
Tenga en cuenta que probablemente no será imprimible.
fuente
La solución más fácil sería tan simple como:
fuente