Vb6 to C# [Résolu]

Messages postés
51
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
11 novembre 2014
- - Dernière réponse : acive
Messages postés
122
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
14 décembre 2016
- 11 nov. 2014 à 15:31
Bonjour, j'ai une fonction que j'aimerais transformer en c#.
J'ai tester différente façons de le faire mais les veleur des variables ne me ramène pas la même chose que dans le code Vb6.

Code Vb6

Private Function DoXor(ByVal strTmp As String) As String
On Error Resume Next
Dim lngC As Long
Dim lngB As Long
Dim lngN As Long

For lngN = 1 To Len(strTmp)
lngC = Asc(Mid(strTmp, lngN, 1))
lngB = Int(Rnd * 256)
Mid(strTmp, lngN, 1) = Chr(lngC Xor lngB)
Next lngN
DoXor = strTmp
End Function


J'ai converti le code vers ceci :

using Microsoft.visualbasic;


private string DoXor(string strTmp)
{
long lngC = 0;
long lngB = 0;
long lngN = 0;

for (lngN = 1;
lngN <= strTmp.Length;
lngN = Convert.ToInt64(lngN + 1))
{

lngC = (short)(strTmp.Substring((int)(lngN) - 1, 1)[0]);
lngB = Convert.ToInt64(Conversion.Int(VBMath.Rnd() * (float)256));

StringType.MidStmtStr(ref strTmp, (int)(lngN), 1, Convert.ToString((char)((int)(lngC) ^ (int)(lngB))));
}
return strTmp;
}


En exécutant le code VB6, la valeur de lngB = 167 et quand je l'exécute du coter c# i lest égale à 218.

C'est valeur doivent être identique parce que je les utilisent pour générer un mot de passe.

je ne voie pas ce qu'il ne fonctionne pas ?
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
1
Merci
Bonsoir,

L'usage de générateur aléatoire n'est pas conseillé pour le chiffrage de données, car les valeurs retournées dépendent largement du code dudit générateur.

Ensuite, Long en VB6 est Int32 en .NET.
Évites l'usage de Microsoft.VisualBasic, regardes dans Math.Randomize.
Pour extraire un char, pas besoin de SubString, tu peux simplement faire : MonTab=MaChaine.ToCharArray()

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
51
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
11 novembre 2014
0
Merci
Merci, de m'avoir éclairer. je vais essayer de faire cela.


--
Commenter la réponse de mattiussi
Messages postés
122
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
14 décembre 2016
0
Merci
Bonjour,
J'aurais opté pour une solution un peu moins aléatoire et aussi efficace :

VB6 :
Private Sub Command1_Click()
MsgBox Code("abcdef")
End Sub
Private Sub Command2_Click()
MsgBox Decode("ÛÝßáãå")
End Sub

'Pour coder le mot de passe:
Private Function Code(Password As String) As String
If Len(Password) > 0 Then
Dim Pass As String
Dim i, n As Long
Dim PassLenght As Long
PassLenght = Len(Password)
n = 127 - PassLenght + 1
Pass = ""
For i = 1 To PassLenght
Pass = Pass & Chr(n + Asc(Mid(Password, i, 1)))
n = n + 1
Next
Code = Pass
End If
End Function

'Pour décoder le mot de passe:
Private Function Decode(Password As String) As String
If Len(Password) > 0 Then
Dim Pass As String
Dim i, n As Long
Dim PassLenght As Long
PassLenght = Len(Password)
n = 127 - PassLenght + 1
Pass = ""
For i = 1 To PassLenght
Pass = Pass & Chr(Asc(Mid(Password, i, 1)) - n)
n = n + 1
Next
Decode = Pass
End If
End Function


VB.NET :
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show(Code("abcdef"))
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
MessageBox.Show(Decode("ÛÝßáãå"))
End Sub

'Pour coder un mot de passe
Private Function Code(ByVal Password As String) As String
Dim Pass As String = ""
If Password.Length > 0 Then
Dim PassLenght As Integer = Password.Length
Dim n As Integer = 127 - PassLenght + 1
For Each Ch As Char In Password
Pass = Pass & Convert.ToChar(n + Convert.ToInt32(Ch))
n += 1
Next
End If
Return Pass
End Function

'Pour décoder un mot de passe
Private Function Decode(ByVal Password As String) As String
Dim Pass As String = ""
If Password.Length > 0 Then
Dim PassLenght As Integer = Password.Length
Dim n As Integer = 127 - PassLenght + 1
For Each Ch As Char In Password
Pass = Pass & Convert.ToChar(Convert.ToInt32(Ch) - n)
n += 1
Next
End If
Return Pass
End Function


EN C#... (soyons fous !...) :)
        private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(Code("abcdef"));
}

private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show(Decode("ÛÝßáãå"));
}

//Pour coder un mot de passe
private string Code(string Password)
{
string Pass = "";
if (Password.Length > 0)
{
int PassLenght = Password.Length;
int n = 127 - PassLenght + 1;
foreach (char Ch in Password)
{
Pass = Pass + Convert.ToChar(n + Convert.ToInt32(Ch));
n += 1;
}
}
return Pass;
}

//Pour décoder un mot de passe
private string Decode(string Password)
{
string Pass = "";
if (Password.Length > 0)
{
int PassLenght = Password.Length;
int n = 127 - PassLenght + 1;
foreach (char Ch in Password)
{
Pass = Pass + Convert.ToChar(Convert.ToInt32(Ch) - n);
n += 1;
}
}
return Pass;
}


Bonne journée...
Commenter la réponse de acive