VB 2013: автоматический вход из выпуска my.settings

Я использую последнюю версию Awesomium для WebControl для своего приложения. Когда мое приложение попадает на "account.google.com/ServiceLogin", оно должно выполнить некоторый Javascript для автоматического входа в него. В my.settings.java у меня есть:

"document.getElementById('Email').value=""1"";document.getElementById('Passwd').value=""2"";document.getElementById('signIn').click()"

Значение "1" - это электронная почта, а "2" - пароль. Итак, когда документ готов, у меня есть это:

Private Sub WebBrowser1_DocumentReady(sender As Object, e As Awesomium.Core.UrlEventArgs) Handles WebBrowser1.DocumentReady
    If WebBrowser1.Source.ToString.Contains("accounts.google.com/ServiceLogin") = True Then
        WebBrowser1.ExecuteJavascript(My.Settings.java.ToString)
    Else

    End If

Я не знаю, почему это не работает. Когда я вставляю код прямо так:

WebBrowser1.ExecuteJavascript("document.getElementById('Email').value=""1"";document.getElementById('Passwd').value=""2"";document.getElementById('signIn').click()")

Код работает отлично, и он входит в систему. Причина, по которой он у меня есть в my.settings, заключается в том, что он у меня изначально есть в текстовом поле, затем я спрашиваю у пользователя его адрес электронной почты и пароль, а затем заменяю "1" на электронную почту, и "2" с паролем, затем сохраните отредактированный текст текстового поля в my.settings.java. Затем он заставляет меня искать Javascript там, вместо того, чтобы жестко кодировать его в приложении и не иметь возможности настраивать его для каждого пользователя. Является ли какой-либо мой код неправильным, или есть другой способ сделать это с Awesomium. Кроме того, я использую Awesomium WebControl1, я просто изменил его на WebBrowser1, потому что это то, что я привык печатать. Извините, если этот вопрос прост, так как я студент-разработчик, с очень ограниченными знаниями в Javascript.

1 ответ

Решение

Я никогда не использую my.settings, когда дело доходит до конфиденциальных данных, таких как пароли (даже электронные письма). Что я всегда делаю, я шифрую их в XML-файле, используя простое, но динамическое шифрование, например:

Открытая функция Encrypt(ByVal plainText As String) Как строка
    Dim passPhrase As String = **My.Computer.Name.ToString**
    Dim saltValue As String = **My.Computer.Info.OSFullName.ToString**
    Dim hashAlgorithm As String = "SHA1"
    Dim passwordIterations As Integer = 2
    Dim initVector As String = "@1B2c3D4e5F6g7H8"
    Dim keySize As Integer = 256
    Dim initVectorBytes As Byte() = Encoding.ASCII.GetBytes(initVector)
    Dim saltValueBytes As Byte() = Encoding.ASCII.GetBytes(saltValue)
    Dim plainTextBytes As Byte() = Encoding.UTF8.GetBytes(plainText)
    Dim password As New PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations)
    Dim keyBytes As Byte() = пароль.GetBytes(keySize \ 8)
    Dim симметричный Key As New RijndaelManaged()
    mmetricKey.Mode = CipherMode.CBC
    Dim encryptor As ICryptoTransform =mmetricKey.CreateEncryptor(keyBytes, initVectorBytes)
    Dim memoryStream As New IO.MemoryStream()
    Dim cryptoStream As New CryptoStream(memoryStream, шифратор, CryptoStreamMode.Write)
    cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length)
    cryptoStream.FlushFinalBlock()
    Dim cipherTextBytes As Byte() = memoryStream.ToArray()
    memoryStream.Close()
    cryptoStream.Close()
    Dim cipherText As String = Convert.ToBase64String(cipherTextBytes)
    Возврат зашифрованного текста
Конечная функция

Открытая функция Decrypt(ByVal cipherText As String) как строка
    Dim passPhrase As String = **My.Computer.Name.ToString**
    Dim saltValue As String = **My.Computer.Info.OSFullName.ToString**
    Dim hashAlgorithm As String = "SHA1"
    Dim passwordIterations As Integer = 2
    Dim initVector As String = "@1B2c3D4e5F6g7H8"
    Dim keySize As Integer = 256
    Dim initVectorBytes As Byte() = Encoding.ASCII.GetBytes(initVector)
    Dim saltValueBytes As Byte() = Encoding.ASCII.GetBytes(saltValue)
    Dim cipherTextBytes As Byte() = Convert.FromBase64String(cipherText)
    Dim password As New PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations)
    Dim keyBytes As Byte() = пароль.GetBytes(keySize \ 8)
    Dim симметричный Key As New RijndaelManaged()
    mmetricKey.Mode = CipherMode.CBC
    Dim decryptor As ICryptoTransform =mmetricKey.CreateDecryptor(keyBytes, initVectorBytes)
    Dim memoryStream As New IO.MemoryStream(cipherTextBytes)
    Dim cryptoStream As New CryptoStream(memoryStream, расшифровщик, CryptoStreamMode.Read)
    Dim plainTextBytes As Byte() = Новый байт (cipherTextBytes.Length - 1) {}
    Dim decryptedByteCount As Integer = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length)
    memoryStream.Close()
    cryptoStream.Close()
    Dim plainText As String = Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount)
    Возврат обычный текст
Конечная функция

И это все еще не так безопасно. Лучший способ - дать пользователю возможность ввести пароль. Что касается вашего ответа, если я понимаю ваш вопрос, вам нужно создать профили и хранить их в файлах / реестре. (Я рекомендую файлы или базу данных). Так что, когда "Джон" использует вашу программу, он выберет профиль "Джон"... и так далее.

Другие вопросы по тегам