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

Plus d'informations
il y a 9 ans 6 mois #22253 par Roninjin
Super ça marche
[code:1]$PasswordClear = 'Test'
$Map= new-object System.Collections.Hashtable
$Map.'a'='K'
$Map.'b'='2'
$map.'c'='y'
$Map.'d'='p'
$map.'e'='l'
$map.'f'='E'
$map.'g'='C'
$map.'h'='r'
$map.'i'='7'
$map.'j'='t'
$map.'k'='U'
$map.'l'='a'
$map.'m'='9'
$map.'n'='0'
$map.'o'='e'
$map.'p'='W'
$map.'q'='i'
$map.'r'='L'
$map.'s'='3'
$map.'t'='f'
$map.'u'='o'
$map.'v'='N'
$map.'w'='h'
$map.'x'='5'
$map.'y'='c'
$map.'z'='R'
$map.'A'='w'
$map.'B'='S'
$map.'C'='m'
$map.'D'='I'
$map.'E'='v'
$map.'F'='Y'
$map.'G'='4'
$map.'H'='n'
$map.'I'='Q'
$map.'J'='d'
$map.'K'='F'
$map.'L'='A'
$map.'M'='b'
$map.'N'='P'
$map.'O'='D'
$map.'P'='X'
$map.'Q'='z'
$map.'R'='M'
$map.'S'='Z'
$map.'T'='k'
$map.'U'='j'
$map.'V'='g'
$map.'W'='H'
$map.'X'='$'
$map.'Y'='O'
$map.'Z'='q'
$map.'0'='B'
$map.'1'='G'
$map.'2'='T'
$map.'3'='x'
$map.'4'='s'
$map.'5'='1'
$map.'6'='u'
$map.'7'='8'
$map.'8'='V'
$map.'9'='6'



$map
$PasswordEncrypt = ''

foreach ($C in [char[]]$PasswordClear){
$PasswordEncrypt +=$map.\"$C\"
}
$PasswordEncrypt[/code:1]

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

Plus d'informations
il y a 9 ans 6 mois #22254 par Philippe
après au niveau sécurité il y a des méthodes plus \"secu\" :whistle:

par exemple la cmdlet : convertfrom-securestring

un exemple d'utilisation en Français non crypté !! :lol:

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

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

tu remarque je n'est que changé l'ordre des remplace mais aussi forcé la sensibilité à la case du \"replace\"

Oui, mais cela ne change pas le fond du pb.
-Replace renvoie une chaine, le principe de l' enchaînement de méthodes , il y a donc le risque de collision suivant :
[code:1]
-creplace 'M','P'`
-creplace 'P','M'`
#Ou
-creplace 'P','M'`
-creplace 'M','P'`
[/code:1]
Ici on traite à nouveau ce qui a été remplacé, -Replace étant basé sur des regex celles-ci consomment toutes les lettres.
Il reste la possibilité de combiner une regex et un scriptblock contenant un switch, et qui ne nécessite qu'un seul appel :
[code:1]
#crée un délégué du type précisé
$delegate= [System.Text.RegularExpressions.MatchEvaluator] {
param($lettre)
Switch -casesensitive ($Lettre) {
'M' {'P'}
'l' {'a'}
'k' {'r'}
'a' {'i'}
'x' {'s'}
#default {$lettre}
}
}
$reg = [regex] \".\"
$PasswordClear = 'Mlkax'
$reg.Replace($PasswordClear, $delegate)
[/code:1]
Ici la regex consomme toutes les lettres et exécute le scriptblock pour chaque caractère.

La solution basée sur la variable $Map fait +- la même chose, en plus simple :-).

Tutoriels PowerShell

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

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

Oui, mais cela ne change pas le fond du pb.

exact
mais ça depend surtout de la complexité du cryptage (du nombre de caractères changé !!)
c'est pour ça qu'il existe d'autres méthodes spécialisé dans ce travail !! :P<br><br>Message édité par: 6ratgus, à: 2/09/16 11:44

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

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