Vb6 to C#

Résolu
mattiussi Messages postés 51 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 11 novembre 2014 - 10 nov. 2014 à 20:37
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 ?

3 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 nov. 2014 à 21:18
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()
1
mattiussi Messages postés 51 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 11 novembre 2014
11 nov. 2014 à 10:48
Merci, de m'avoir éclairer. je vais essayer de faire cela.


--
0
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'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...
0
Rejoignez-nous