Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème crypto 3des c#/php

2 réponses
Avatar
wmn
bonjour,

J'ai une appli c# qui échange des données cryptées 3des avec du code
php. Les résultats du chiffrement en c# et php que j'obtiens sont
différents. J'ai du faire une erreur quelque part !

y a t-il quelqu'un qui a une solution qui fonctionne ?




ci-dessous mon code c#
-------------------------------------------------
string skey = "VnmqrY47Vmdpnbi+mxY9SxFaKRoXLvjm";
string siv = "rjAVHTGeTs4=";
string data = "le texte que je veux chiffrer";

SymmetricAlgorithm tDes = new TripleDESCryptoServiceProvider();
tDes.Key = Convert.FromBase64String(skey);
tDes.IV = Convert.FromBase64String(siv);

ICryptoTransform ict = tDes.CreateEncryptor(tDes.Key, tDes.IV);
byte[] ab = Encoding.UTF8.GetBytes(data);

MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, ict, CryptoStreamMode.Write);
cs.Write(ab, 0, ab.Length);
cs.FlushFinalBlock();
cs.Close();

console.writeline(Convert.ToBase64String(ms.ToArray()));





ci-dessous mon code php
-------------------------------------------------
$skey = "VnmqrY47Vmdpnbi+mxY9SxFaKRoXLvjm";
$siv = "rjAVHTGeTs4=";
$data = "le texte que je veux chiffrer";

$key = base64_decode($skey);
$iv = base64_decode($siv);

echo base64_encode(mcrypt_cbc(MCRYPT_3DES, $key, $data, MCRYPT_ENCRYPT,
$iv));


wmn.

2 réponses

Avatar
Christophe HENRY
Le Thu, 14 Dec 2006 12:04:15 +0100, wmn a écrit:

J'ai une appli c# qui échange des données cryptées 3des avec du code
php. Les résultats du chiffrement en c# et php que j'obtiens sont
différents. J'ai du faire une erreur quelque part !

y a t-il quelqu'un qui a une solution qui fonctionne ?


Un début de piste : utilise une troisième façon de chiffrer en 3des afin
de voir si les programmes sont justes.

Gnupg le fait. Exemple :
$ cd /tmp
$ echo "test" >fichier
$ gpg --symmetric --cipher-algo 3DES --output fichier.3DES fichier
[Il demande une phrase de passe]
$ gpg --decrypt fichier.3DES
[Il demande une phrase de passe]
gpg: 3DES encrypted data
gpg: encrypted with 1 passphrase
test
gpg: WARNING: message was not integrity protected

Évidemment, tu es sous MsWindows alors il faudra que tu adaptes un peu.

--
Christophe HENRY
http://www.sbgodin.fr - Site perso

Avatar
Sylvain
wmn wrote on 14/12/2006 12:04:
bonjour,

J'ai une appli c# qui échange des données cryptées 3des avec du code
php. Les résultats du chiffrement en c# et php que j'obtiens sont
différents. J'ai du faire une erreur quelque part !


la dernière remarque est surement la seule/la plus pertinente.

y a t-il quelqu'un qui a une solution qui fonctionne ?


"une" solution qui fait du 3DES, je pense que plein de personnes ont cela.

ci-dessous mon code c#
-------------------------------------------------
string skey = "VnmqrY47Vmdpnbi+mxY9SxFaKRoXLvjm";
string siv = "rjAVHTGeTs4=";
string data = "le texte que je veux chiffrer";

SymmetricAlgorithm tDes = new TripleDESCryptoServiceProvider();
enchanté


tDes.Key = Convert.FromBase64String(skey);
la sortie, bcp plus que le nom de la méthode, aurait été utile pour

vérifier que ce n'est pas là l'erreur.
tDes.IV = Convert.FromBase64String(siv);
la sortie, bcp plus que le nom de la méthode, aurait été utile pour

vérifier que ce n'est pas là l'erreur.

ICryptoTransform ict = tDes.CreateEncryptor(tDes.Key, tDes.IV);
enchanté

byte[] ab = Encoding.UTF8.GetBytes(data);
dito


MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, ict, CryptoStreamMode.Write);
cs.Write(ab, 0, ab.Length);
cs.FlushFinalBlock();
cs.Close();
blabla


??? et poster l'hexa du chiffre - pour que l'on vous confirme sa valeur
- non ?

console.writeline(Convert.ToBase64String(ms.ToArray()));

ci-dessous mon code php
-------------------------------------------------
$skey = "VnmqrY47Vmdpnbi+mxY9SxFaKRoXLvjm";
la sortie, bcp plus que le nom de la méthode, aurait été utile pour

vérifier que ce n'est pas là l'erreur.
$siv = "rjAVHTGeTs4=";
la sortie, bcp plus que le nom de la méthode, aurait été utile pour

vérifier que ce n'est pas là l'erreur.

$data = "le texte que je veux chiffrer";

$key = base64_decode($skey);
$iv = base64_decode($siv);
dito


echo base64_encode(mcrypt_cbc(MCRYPT_3DES, $key, $data, MCRYPT_ENCRYPT,
$iv));
dito


Sylvain.