bugfix> vb.net > 投稿

Visual Basic .Netでログインフォームを設定しています。このデータベースをインターネットでホストして、人々がどこにいても接続できるようにしたいと思います。

問題は、セキュリティ。 コードにユーザー名とパスワードが含まれていると、簡単にハッキングされ、プログラムがクラックされます。

パスワードの代わりに使用できるトークンを使用する方法はありますか?それはプログラム自体からのみアクセスできますか?

これは私のコードです:

Dim connection As New MySqlConnection("datasource=localhost;port-3306;username;whatever;password=whatever;database=whatever")

そして、これは私が探しているもののようなものです:

Dim connection As New MySqlConnection("token=aFjiwqMF93JmHSazhH")

もしそうなら、私はこれをどのように行い、データベーストークンとリンクをどこから入手しますか?

回答 1 件
  • あなたのプログラムをクラックできる人は誰でも、MySQLにクラックする知識を持っている可能性が高いでしょう...私は知っている、それは答えではなく、私はプログラムを同様のものから保護しようと何週間も費やしましたが、その後、「なぜ。 。? '

    そうは言っても、本当にラップしてソースコードを削除し、パスワードを削除する必要がある場合は、テキストファイルからどこかに接続文字列を読み込むのはどうでしょうか。

    単純暗号化は system.security.cryptography を参照

    単に文字列を暗号化するための古いコードを調べたところ、これを見ることができます

    Imports System.Security.Cryptography
    Imports System.Net
    Public NotInheritable Class Encryptorr
    Public TDS As New TripleDESCryptoServiceProvider
    Private Function EncHash(ByVal key As String, ByVal length As Integer) As Byte()
        Dim enc_Sha1 As New SHA1CryptoServiceProvider
        Dim keyBytes() As Byte =
            System.Text.Encoding.Unicode.GetBytes(key)
        Dim hash() As Byte = enc_Sha1.ComputeHash(keyBytes)
        ReDim Preserve hash(length - 1)
        Return hash
    End Function
    Sub New(ByVal key As String)
        TDS.Key = EncHash(key, TDS.KeySize \ 8)
        TDS.IV = EncHash("", TDS.BlockSize \ 8)
    End Sub
    Public Function EncryptData(ByVal plaintext As String) As String
        Dim Strbytes() As Byte = System.Text.Encoding.Unicode.GetBytes(plaintext)
        Dim memStr As New System.IO.MemoryStream
        Dim encStream As New CryptoStream(memStr, TDS.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
        encStream.Write(Strbytes, 0, Strbytes.Length)
        encStream.FlushFinalBlock()
        Return Convert.ToBase64String(memStr.ToArray)
    End Function
    Public Function DecryptData(ByVal encryptedtext As String) As String
        Try
            Dim enc_Bytes() As Byte = Convert.FromBase64String(encryptedtext)
            Dim mem_Str As New System.IO.MemoryStream
            Dim decStream As New CryptoStream(mem_Str, TDS.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
            decStream.Write(enc_Bytes, 0, enc_Bytes.Length)
            decStream.FlushFinalBlock()
            Return System.Text.Encoding.Unicode.GetString(mem_Str.ToArray)
        Catch ex As Exception
            Return "Decryption Failed"
        End Try
    End Function
    End Class
    
    

    で呼び出す

    Public Sub TestMe()
        Dim encr As Encryptorr = New Encryptorr("AlovelyLong463728KeytoEncryptwith")
        Dim encrytedstr As String = encr.EncryptData(textbox1.text)
        Textbox2.text = encrytedstr
        Dim decry As Encryptorr = New Encryptorr("AlovelyLong463728KeytoEncryptwith")
        Dim decryptedtext As String = decry.DecryptData(Textbox2.text)
        Textbox3.text = decryptedtext
    End Sub
    
    

    その後、テキストファイルから読み取った文字列を暗号化および解読できますが、元のポイントに戻ります。誰かがプログラムコードにアクセスできる場合、解読も解決できます... :(

    思考の糧幸運を

    更新 - 追加するだけで、暗号化された文字列を常に作成し、それをグローバル変数として使用し、decryt関数を使用して接続文字列として直接渡すことができます。つまり、ユーザー名とパスワードをテキストファイルに保存する代わりに、 Public Shared Constr as String = fhdasjifhn32437289cj を使用するだけです。  (または暗号化された文字列が何であれ)、接続は Dim Con as MySQLConnection = new MySQLConnection(DecryptMyStr(Constr)) になります  DecryptMyStrが復号化関数である

あなたの答え