web-dev-qa-db-fra.com

Créer des mots non aléatoires

dd if=/dev/urandom of=a.log bs=1M count=2

Question: si ce code ^ me donne des nombres aléatoires, comment puis-je obtenir des non-mots aléatoires (inintelligibles) tels que "hgcqw".

Question 2: La commande shuf peut-elle être utilisée conjointement avec la commande dd?

Merci!

6/21 Mise à jour. (Fête des pères)

@ Serg Mon objectif était d'obtenir des chiffres au début. Disons, des nombres aléatoires de deux chiffres de 01 à 100. Donne la commande et lance le code. Finalement, cela me donnera 14, 17, 21, 35 (je compose les nombres aléatoires que je reçois). Ensuite, je voulais obtenir une moyenne de ces chiffres. Dans ce cas, la moyenne serait de 21,75 (22). L'objectif serait d'arrêter la boucle jusqu'à ce qu'il trouve une moyenne spécifique que je cherchais. Dans ce cas, il serait de 25. Mon deuxième objectif était d'obtenir des mots aléatoires, puis de compter le nombre de mots utilisés.

@ terdon

Un mot est "buck", "canard" ou "bonne vieille chance". Fondamentalement, tout ce qui est trouvé dans le dictionnaire. Les longueurs seraient encore si nous devions limiter la limite à 5 lettres, cela ne me dérangerait pas d'apprendre comment?

C'est quoi un mot? Je suppose que vous voulez dire seulement a-z et a-z mais quelles longueurs? Liwyduglashvdbalishfvgapivflakhf serait-il un mot? Que diriez-vous de ksjdas-asd-asd-asd? - peut être en mots. Veuillez éditer et clarifier. - terdon hier

4
ricomon

Générez un caractère alphabétique aléatoire.

tr -cd '[:alpha:]' < /dev/urandom | fold -w1 | head -n1  

Générez une chaîne alphabétique aléatoire de 10 caractères.

tr -cd '[:alpha:]' < /dev/urandom | fold -w10 | head -n1

Certaines des classes de caractères POSIX alternatives à utiliser à la place de alpha dans [:alpha:] sont les suivantes: alnum - caractères alphanumériques
caractères alphabétiques
digit - digits
graph - caractères visibles
minuscule - minuscule
majuscule - caractères majuscules

Générez des nombres aléatoires dans une plage spécifique (exemple 1-10).

shuf -i 1-10 -n1  

Comparée aux deux premiers exemples bash, la commande shuf offre moins d'options pour générer des chaînes aléatoires, bien que shuf puisse être utilisée pour générer des permutations aléatoires.

8
karel
dd if=/dev/urandom of=a.log bs=1M count=2

Cela ne vous donne pas des nombres aléatoires. Cela vous donne au hasard octets. Vous pouvez l'encoder en nombres:

hexdump -v -e '"%d\n"' /dev/urandom | dd of=a.log bs=1M count=2

(La version antérieure utilisait od, mais le format de sortie de od est plutôt inflexible.)

Utiliser directement /dev/random pourrait être une perte de temps puisqu'il s'agit d'un flux d'octets. Vous pouvez le coder en base64, puis supprimer les caractères non alphabétiques, ce qui devrait vous permettre d'obtenir, en moyenne, 80% des données en entrée:

base64 /dev/urandom | tr -cd '[[:alpha:][:space:]]'

Cela tend à laisser des lignes plutôt longues. Vous pouvez, au lieu de cela, remplacer les nombres par des nouvelles lignes:

base64 /dev/urandom | sed 's/[^[:alpha:]]\+/\n/g'
7
muru

Pour générer une chaîne alphabétique minuscule aléatoire (espaces compris) de 2 Mo:

< /dev/urandom tr -dc 'a-z ' | head -c 2000000 > a.log

Pour un flux constant:

< /dev/urandom tr -dc 'a-z '

Pour générer une chaîne alphabétique mixte à casse aléatoire (espaces compris) de 2 Mo:

< /dev/urandom tr -dc 'A-Za-z ' | head -c 2000000 > a.log

Pour un flux constant:

< /dev/urandom tr -dc 'A-Za-z '
4
kos

Une autre version (-c${1:-10} = longueur de 10):

< /dev/urandom tr -dc A-Za-z | head -c${1:-10} > out

ou (head -n 10 = longueur de 10)

strings /dev/urandom | grep -o '[[:alpha:]]' | head -n 10 | tr -d '\n' > out

ou avec dd (count=10 = longueur de 10)

dd if=/dev/urandom bs=1 count=10 2>/dev/null | base64 | grep -o '[[:alpha:]]' | head -n 30 | tr -d '\n' > out

ou ca

openssl Rand -base64 32| grep -o '[[:alpha:]]' | head -n 10 | tr -d '\n' > out

ou ca

date +%s | sha256sum | base64 | grep -o '[[:alpha:]]'| head -n 10 | tr -d '\n' > out
3
A.B.

Voici mon idée. mkpasswd est souvent utilisé pour générer des mots de passe cryptés. Par conséquent, les chaînes qui y figurent ne devraient pas déjà être intelligibles. Le petit problème est qu'il génère des chaînes avec des nombres. En utilisant sed, nous pouvons nous en débarrasser.

mkpasswd | sed 's/[0-9]/YOLO/g'

YOLO peut être ce que vous voulez remplacer par des chiffres. Vous pouvez aussi simplement les supprimer:

mkpasswd | sed 's/[0-9]//g'

Voici un autre moyen:

$ date | md5pass | sed 's/[0-9]//g'                                                                                                   
$$NG.dLw$vcpGCylnDtmptDtogDr/

Comme suggéré dans les commentaires ci-dessous, vous pouvez également installer pwgen avec Sudo apt-get install pwgen et exécuter pwgen -0. L'indicateur -0 indique à la commande d'éviter les chiffres

Et voici sha1pass + sed combo:

sha1pass | sed 's/[[:digit:]]//g' | sed 's/[[:punct:]]//g'
Résultat: PoXGAlAWjzMHgmfzHiYHGpemzqE

Une autre méthode avec la variable $ RANDOM: echo $RANDOM | tr '0-9' 'a-z'

Globalement, si votre objectif est de générer un mot de passe, je vous suggère de lire cet article:

http://www.howtogeek.com/howto/30184/10-ways-to-generate-a-random-password-from-the-command-line/

3

Utiliser python:

#!/usr/bin/env python2
import random, string 
def Rand_gen(number_of_words, length):
    for i in range(number_of_words):
        print ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase) for _ in range(length))
    return
  • Nous avons défini une fonction Rand_gen(number_of_words, length) qui prendra deux paramètres en entrée, number_of_words contiendra le nombre de mots aléatoires que vous souhaitez générer, length contiendra la longueur de chaque mot aléatoire.

  • string.ascii_lowercase et string.ascii_uppercase ont respectivement toutes les ASCII lettres minuscules et majuscules

  • random.choice choisira un seul caractère parmi [A-Za-z] à chaque fois et length s'assurera que cette itération continue jusqu'au nombre length. join() joindra ensuite les personnages pour obtenir un mot de la longueur souhaitée

  • Ce processus sera poursuivi jusqu'à number_of_words

Exemple:

Rand_gen(5, 3)
PDI
qKQ
Dvu
kwr
wDz

Rand_gen(2, 5)
GLKXr
uOaHj
3
heemayl