Algo d'encodage - décodage
Bonjour,
J'ai besoin de coder/décoder une chaîne de caractère dans mon appli C#/ASP.NET. J'ai donc trouvé sur le net un tel algorithme en PHP :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
public static function decrypt($val)
{
$mes=$val;
$password="clé";
$res=' ';
$r="";
$j=0;
$tmp=0;
$mes = base64_decode($mes);
$lgmot = strlen($mes);
for ($i = 0; $i < $lgmot; $i++) {
$tmp = ord($mes[$i]) - ord($password[$j]);
//ici on prends les 2 valeurs ascii des caratères du message
//en position i et du mot de passe en position j et on les soustrait.
//Si le résultat est négatif, pas de panique, on ajoute 256 et hop,
//nous nous y retrouvons.
if ($tmp < 0) {
$tmp = 256 + $tmp;
}
$r.=chr($tmp);
if ($j == (strlen($password)-1)) {
$j= 0;
} else {
$j=(($j % (strlen($password))) + 1);
//Modulo pour parcourrir le mot de passe...
}
}
return $r;
}
public static function crypt($val)
{
$mes=$val;
$password="clé";
$res=' ';
$r="";
$j=0;
$tmp=0;
$lgmot = strlen($mes);
for ($i = 0; $i < $lgmot; $i++) {
$tmp = ord($mes[$i]) + ord($password[$j]);
if ($tmp > 255) {
$tmp = $tmp - 256;
}
$r.=chr($tmp);
if ($j == (strlen($password)-1)) {
$j= 0;
} else {
$j=(($j % (strlen($password))) + 1);
}
}
$r = base64_encode($r);
return $r;
} |
J'ai donc traduit ce code en C# :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
protected string decrypt(string val) {
string password = ConfigurationSettings.AppSettings["CRYPT_KEY"].ToString();
string mes = val;
string r = "";
int j = 0;
int tmp = 0;
//string mes = DecodeBase64String(mel);
int lgmot = mes.Length;
for (int i = 0; i < lgmot; i++) {
tmp = (int)mes[i] - (int)password[j];
//ici on prends les 2 valeurs ascii des caratères du message
//en position i et du mot de passe en position j et on les soustrait.
//Si le résultat est négatif, pas de panique, on ajoute 256 et hop,
//nous nous y retrouvons.
if (tmp < 0) {
tmp = 256 + tmp;
}
r += (char)tmp;
if (j == (password.Length - 1)) {
j = 0;
} else {
j = (j % (password.Length)) + 1;
//Modulo pour parcourrir le mot de passe...
}
}
return r;
}
public string DecodeBase64String(string encodedData) {
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes);
return returnValue;
}
protected string crypt(string val) {
string password = ConfigurationSettings.AppSettings["CRYPT_KEY"].ToString();
string r = "";
int j = 0;
int tmp = 0;
int lgmot = val.Length;
for (int i = 0; i < lgmot; i++) {
tmp = (int)val[i] + (int)password[j];
if (tmp > 255) {
tmp = tmp - 256;
}
r += (char)tmp;
if (j == (password.Length - 1)) {
j = 0;
} else {
j = (j % (password.Length)) + 1;
}
}
//r = EncodeStringToBase64(r);
return r;
}
public string EncodeStringToBase64(string toEncode) {
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
} |
Mais cet algo ne marche plus en C#...
Séparément, les fonctions d'encodage/décodage en Base64 fonctionnent très bien, et l'algorithme fonctionne également sans l'encodage en B64.
Mais en associant les 2 je ne retrouve jamais ma chaîne originale après l'avoir décryptée...
Le pb pourrait-il être causé par le type d'encodage de texte propre à mon navigateur ? (UTF, ISO etc...)
Merci pour votre aide.