1
我想將VB5轉換爲.NET,並且無法使二進制讀取正常工作。我的VB.NET解碼只能正確讀取前兩個字符。 的(VB5-> VB.NET)編碼是打開/讀取二進制文件 - 訪問權
' 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
而(VB5-> VB.NET)解碼是
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
我VB.NET代碼失敗(不能讀取該文件正確)是;
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
任何人都可以幫助我從VB5到.NET翻譯?
igrimpe。謝謝。解密幾乎與轉換後的VB5代碼一起工作。它運行但不是所有的字符都被翻譯回原來的。我曾希望爲傳統的VB5和.NET創建一個通用的許可證文件(<100個字符),或許這是不可能的。我查閱了真正的加密;它似乎並不是所有的.NET代碼更短/更簡單......;) – Graham
@Graham:WHICH代碼「部分地」工作?你的(第三塊)代碼,還是我的?如果它是你的:ReadChar讀取一個CHAR,在VB.Net中默認是一個UNICODE字符。這意味着超出「true」ASCII的所有字符都不會返回它們的初始值。由於您使用舊的VB5代碼編寫了字節,因此應更好地閱讀BYTE。我用一些示例代碼更新了我的答案以顯示問題。 – igrimpe
@grimpe它是你的代碼部分工作,前兩個字符匹配原始字符串,但其餘的不是。我的第三塊失敗慘敗。使用您的示例,我現在重寫了.NET安全性並將使用不同的許可證文件名。這並不重要,因爲安全DLL(VB5,NET)只會讀取它們合適的文件,所以如果用戶將這兩個文件放入任一目錄中,只有相關的文件將被讀取。謝謝您的幫助。 – Graham