【问题标题】:VB.Net and phpMyAdmin: How to connect to phpMyAdmin SQL server without needing a Username or Password?VB.Net 和 phpMyAdmin:如何在不需要用户名或密码的情况下连接到 phpMyAdmin SQL 服务器?
【发布时间】:2018-05-25 09:55:30
【问题描述】:

我正在 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")

如果是这样,我将如何执行此操作,以及从哪里获取数据库令牌和链接?

【问题讨论】:

    标签: vb.net phpmyadmin web-hosting


    【解决方案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 是解密函数

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 2011-10-29
      • 2021-09-23
      • 2023-01-09
      • 1970-01-01
      • 2021-03-02
      • 2014-12-08
      • 2015-05-15
      • 1970-01-01
      相关资源
      最近更新 更多