3 votes

La commande `strings` produit une sortie anormale

Normalement, la commande shell cat /dev/urandom | strings -n16 produirait une liste de chaînes ASCII utiles pour choisir des mots de passe. Cependant, après la dernière mise à jour vers MacOS Catalina, la sortie de strings est du 'garbage' art comme suit :

`eIDb,eSqxu
7Ht>Lb2
g(<:}TZ,={
;y9M(}=M
fa>-3&syiJ`\t}Dde7
\^1uN{>lVL3
Ey?65qIi9
...

Qu'est-ce qui se passe?

5voto

Martin R Points 276

Il semble que la commande strings respecte maintenant les paramètres régionaux de l'environnement, en particulier

LC_CTYPE

Cette variable détermine la catégorie locale pour les fonctions de traitement des caractères, telles que tolower(), toupper() et isalpha(). Cette variable d'environnement détermine l'interprétation des séquences d'octets de données textuelles en tant que caractères (par exemple, caractères mono-octet par opposition à multi-octets), la classification des caractères (par exemple, alpha, numérique, graphique) et le comportement des classes de caractères. Les sémantiques supplémentaires de cette variable, le cas échéant, dépendent de l'implémentation.

En définissant LC_CTYPE sur C, le comportement précédent est rétabli :

% cat /dev/urandom | LC_CTYPE=C strings -n 16
X! \*H=:e9c1`nzWk
$Hr/Q9q_b:BE-tS,[
/]59=+fPU"x-B9kk
:"*J9{5Q-tFpL=Xm$>
...

Une approche alternative (issue de Shell Script /dev/urandom sur Stack Overflow avec des modifications mineures) consiste à filtrer les caractères non imprimables avec l'outil tr et à prendre les 16 premiers caractères avec dd :

% cat /dev/urandom | LC_CTYPE=C tr -dc '[:print:]' | dd bs=16 count=1 2> /dev/null

Ceci est beaucoup plus rapide car il ne attend pas 16 caractères imprimables consecutifs de la source aléatoire.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X