J'essaie de convertir VB5 en .NET et ne peut pas obtenir une lecture binaire pour fonctionner. Mon décodage VB.NET lit uniquement les deux premiers caractères correctement. Le (VB5-> VB.NET) encode estOuvrir/Lire un fichier binaire - droits d'accès
' Open file
x = Rnd(-mKeyValue)
filenum = FreeFile()
Try
FileOpen(filenum, Filename, OpenMode.Binary)
Catch ex As IO.IOException
MsgBox(ex.ToString, MsgBoxStyle.Critical, "File opening error")
Exit Sub
End Try
' write data
filecontents = ""
For i = 1 To Len(stringdate)
charnum = Asc(Mid(stringdate, i, 1))
randomint = Int(256 * Rnd())
charnum = charnum Xor randomint
singlechar = Chr(charnum)
FilePut(filenum, singlechar, i)
filecontents = filecontents & singlechar
Next i
Et le (VB5-> VB.NET) deCODE
x = Rnd(-mKeyValue)
filenum = FreeFile()
FileOpen(filenum, Filename, OpenMode.Binary)
For i = 1 To LOF(filenum)
'To VB.NET
FileGet(filenum, singlechar, i)
charnum = Asc(singlechar)
Debug.Print("VB5 singlechar = " & singlechar)
randomint = Int(256 * Rnd())
charnum = charnum Xor randomint
singlechar = Chr(charnum)
Next i
Mon code VB.NET qui échoue (ne peut pas lire le fichier correctement) est;
Using reader As New BinaryReader(File.Open(Filename, FileMode.Open))
' Loop through length of file.
Dim pos As Integer = 0
Dim length As Integer = reader.BaseStream.Length
While pos < length
' Read the integer.
singlechar = reader.ReadChar()
charnum = Asc(singlechar) 'singlechar is type Char
randomint = Int(256 * Rnd())
charnum = charnum Xor randomint
singlechar = Chr(charnum)
i += 1
End While
End Using
Quelqu'un peut-il m'aider avec la traduction de VB5 à .NET?
igrimpe. Merci. Le décryptage fonctionne presque avec le code VB5 converti. Il s'exécute mais tous les caractères ne sont pas traduits dans l'original. J'avais espéré avoir un fichier de licence commun (<100 caractères) pour l'ancien VB5 et .NET, peut-être que ce n'est pas possible. J'ai recherché le CHIFFREMENT RÉEL; il semble que tout le code .NET n'est pas plus court/plus simple ...;) – Graham
@Graham: QUEL code fonctionne "en partie"? Votre code (3e bloc), ou le mien? Si c'est à vous: ReadChar lit un CHAR qui dans VB.Net est par défaut un caractère UNICODE. Cela signifie que tous les caractères au-delà de "vrai" ASCII ne retourneront pas leur valeur initiale. Mieux vaut lire BYTE puisque vous avez écrit des octets avec votre ancien code VB5. J'ai mis à jour ma réponse avec un petit exemple de code pour montrer le problème. – igrimpe
@grimpe C'est votre code qui fonctionne partiellement, les deux premiers caractères correspondent à la chaîne d'origine mais pas le reste. Mon troisième bloc échoue lamentablement. En utilisant vos exemples, j'ai maintenant réécrit la sécurité .NET et j'utiliserai un nom de fichier de licence différent. Cela n'aura pas vraiment d'importance car les DLL de sécurité (VB5, NET) ne liront que leur fichier approprié, donc si l'utilisateur place les deux fichiers dans l'un ou l'autre répertoire, seul le fichier correspondant sera lu. Merci pour l'aide. – Graham