Question [Résolu] Chiffrer :Echange lettres dans une string

Plus d'informations
il y a 9 ans 6 mois #22247 par Roninjin
Bonjour,

J'ai besoin d'un code me permettant de \"crypter\" un mot de passe via une \"matrice\" existante.

Mon code actuel :
[code:1]
$PasswordClear = 'Mlkax'
$PasswordEncrypt = $PasswordClear |ForEach-Object {
$_ -replace 'M','P'`
-replace 'l','a'`
-replace 'k','r'`
-replace 'a','i'`
-replace 'x','s'`
}


$PasswordEncrypt
[/code:1]

Le problème c'est que je voudrais que mon $PasswordEncrypt me donne Paris alors que là il me donne Piris car il remplace \"l\" par \"a\", puis \"a\" par \"i\".

Avec vous la solution ?

Merci<br><br>Message édité par: Arnaud, à: 6/09/16 09:33

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 6 mois #22248 par Laurent Dardenne
Salut,
roninjin écrit:

Avec vous la solution ?

Une, que voici :
[code:1]
$PasswordClear = 'Mlkax'
$map=@{
'M'='P'
'l'='a'
'k'='r'
'a'='i'
'x'='s'
}
$new=''
foreach ($C in [char[]]$PasswordClear) {
$new +=$map.\&quot;$C\&quot;
}
$new
[/code:1]
Si comme l'indique ton titre tu veux changer des lettres, il te faut manipuler des caractères et pas des chaînes.
Ici la variable $map sert de switch.<br><br>Message édité par: Laurent Dardenne, à: 1/09/16 21:01

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 6 mois #22249 par Roninjin
Oui c’était ça le problème, le traitement caractère par caractère, merci tu me sauves !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 6 mois #22250 par Roninjin
En fin de compte, ça ne marche pas comme je l'esperais car quand je mets :
'A' = 'm'
'a' = 'k'

ça m'indique \&quot;duplicate keys are not allowed in hash literals\&quot;

Please help me ! :unsure:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 6 mois #22251 par Laurent Dardenne
roninjin écrit:

ça m'indique \&quot;duplicate keys are not allowed in hash literals\&quot;

Oui c'est normal, PS est insensible à la casse par défaut, je pensais que ton traitement l'était.
tu peux remplacer la variable $map par un switch et utiliser l'opérateur -ceq sensible à la casse.
Ou utiliser une hashtable sensible à la casse, dans ce cas on la crée différemment :
[code:1]
$Map= new-object System.Collections.Hashtable
$Map.'a'='P'
$Map.'A'='p'
$Map
#Name Value
#----
#A p
#a P
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 6 mois #22252 par Philippe
salut a vous deux :)

comme d'habitude les solutions pour un faire un travail en PS sont multiple
pour reprendre ton script d'origine :

[code:1]$PasswordClear = 'Mlkax'
$PasswordEncrypt = $PasswordClear |ForEach-Object {
$_ -creplace 'M','P'`
-creplace 'k','r'`
-creplace 'a','i'`
-creplace 'l','a'`
-creplace 'x','s'`
}


$PasswordEncrypt[/code:1]

tu remarque je n'est que changé l'ordre des remplace mais aussi forcé la sensibilité à la case du \&quot;replace\&quot;
:ohmy:

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.108 secondes
Propulsé par Kunena