Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.62
GRAFMC
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 95
#1

Как сделать сохранение пароля для программы. - Visual Basic .NET

13.08.2011, 06:47. Просмотров 4579. Ответов 34
Метки нет (Все метки)

Привет, у меня пара вопросов:
1) Как сделать так что бы программа которую я написал сохраняла пароль в TextBox1 и TextBox2 при выключении программы ну и компа, если стоит галочка на сохранить пароль (Если не стоит, то соответственно не сохраняет)
http://www.cyberforum.ru/vb-net/thread1086614.html
2) Не могу сделать что бы при выборе первой группы в ComboBox1, свойство текстбокса1 сменилось на
vb.net
1
TextBox1.Enabled = False
А если стоит вторая то на
vb.net
1
TextBox1.Enabled = True
Вроде где то близко, но гадать мне кажется нужно будет ещё 3 часа, если не больше.
Заранее большущая пасиба
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2011, 06:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как сделать сохранение пароля для программы. (Visual Basic .NET):

Как сделать Splash-форму для программы
Можно ли сделать так что бы при запуске приложение появлялась картинка и...

Сравнение значений из внешнего файла, а именно логина и пароля для программы
Подскажите пожалуйста как сделать авторизацию??? Есть 2 формы, на 1 форме...

Как сделать регистрацию для своей программы через реестр
Как сделать регистрацию для своей программы(реестр) - Помогите пожалуйста,...

Сохранение данных из TextBox для следующей загрузки программы
Всем привет... Подскажите пожалуйста можно ли так сделать чтобы допустим: Есть...

Как разумнее всего организовать сохранение/чтение настроек программы в/из XML?
Привет. Подскажите пожалуйста, как разумнее всего организовать...

34
probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
13.08.2011, 11:49 #2
GRAFMC, пароль тебе придётся сохранять в текстовом файле, можешь его куда-нить спрятать.
1
Ciberst
507 / 420 / 19
Регистрация: 16.12.2010
Сообщений: 939
13.08.2011, 11:57 #3
Цитата Сообщение от probit Посмотреть сообщение
его куда-нить спрятать.
а также добавлю: зашифровать, и вообще пароли лучше не хранить, а хранить хеши паролей.
2
GRAFMC
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 95
13.08.2011, 19:15  [ТС] #4
ну можно что бы пароль сохранялся в текстовом файле по пути например: C:\WINDOWS\config.txt
В виде хеша паролей.
Вот просто не знаю как это реализовать.
1
Ivan76
13 / 13 / 1
Регистрация: 24.06.2011
Сообщений: 129
13.08.2011, 19:43 #5
Предлагаю сделать шифрование данных алгоритмом TripleDES! Пример можно найти по этой ссылке.
Перед закрытием шифруем пароль, при открытии чтение и расшифровка.
2
GRAFMC
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 95
13.08.2011, 20:02  [ТС] #6
Предлагаю сделать шифрование данных алгоритмом TripleDES! Пример можно найти по этой ссылке.
Перед закрытием шифруем пароль, при открытии чтение и расшифровка.
Спасибо, мне кажется что очень сложновато будет для меня, лучше пусть сохранение паролей в текстовый файл будет без шифровки, его уже спрятать проще.
0
Provaider
104 / 32 / 1
Регистрация: 01.10.2010
Сообщений: 310
13.08.2011, 20:17 #7
кстати, а можно добавить на форму невидимый текстбокс, туда сохранить пароль, а потом сохранить данные формы.
0
Devel
89 / 44 / 2
Регистрация: 02.11.2010
Сообщений: 261
13.08.2011, 20:29 #8
Создаешь модуль и пишешь в него:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Module Module1
    Public Key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} 'Ключ
    Public IV As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} 'Вектор инициализации
 
    Public Sub Encrypt(ByVal fName As String, ByVal txtEncrypt As String)
        Dim RMCrypto As New Security.Cryptography.RijndaelManaged
        Dim fs As New IO.FileStream(fName, IO.FileMode.Create)
        Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateEncryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Write)
        Dim SWriter As New IO.StreamWriter(CryptStream)
        SWriter.Write(txtEncrypt)
        SWriter.Close()
        fs.Close()
        CryptStream.Close()
    End Sub
 
    Public Function Decrypt(ByVal fName As String) As String
        Dim RMCrypto As New Security.Cryptography.RijndaelManaged
        Dim fs As New IO.FileStream(fName, IO.FileMode.Open)
        Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateDecryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Read)
        Dim SReader As New IO.StreamReader(CryptStream)
        Decrypt = SReader.ReadToEnd()
        SReader.Close()
        fs.Close()
        CryptStream.Close()
    End Function
End Module
Для создания пароля:

vb.net
1
2
3
4
5
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
     If CheckBox1.Checked Then
          Encrypt("C:\Pass.txt", TextBox1.Text)
     End If
End Sub
Для чтения пароля:
vb.net
1
2
3
4
5
6
7
8
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
     Decrypt("C:\Pass.txt", n)
     If TextBox2.Text = n Then
          MsgBox ("Все верно")
     Else 
          MsgBox ("Сначала введи пароль")
End If
End Sub
Это для кнопок. Для открытия и закрытия формы аналогично
2
Ciberst
507 / 420 / 19
Регистрация: 16.12.2010
Сообщений: 939
13.08.2011, 22:13 #9
Лучший ответ Сообщение было отмечено как решение

Решение

InstallGame, смысл этого шифрования нулевой, пароли так не хранят.
небольшой комментарий:
Пароль хранить вообще необязательно, достаточно придумать алгоритм изменяющий по крайней мере KEY из данного участка кода:
vb.net
1
2
Public Key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} 'Ключ
    Public IV As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} 'Вектор инициализации
3
GRAFMC
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 95
13.08.2011, 22:28  [ТС] #10
InstallGame, Сначало подчёркивало n в
vb.net
1
2
3
4
5
6
7
8
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
     Decrypt("C:\Pass.txt", n)
     If TextBox2.Text = n Then
          MsgBox ("Все верно")
     Else 
          MsgBox ("Сначала введи пароль")
End If
End Sub
Требовало обьявления, обьявил, опять n подчёркивает пишет Ошибка1 Слишком большое число аргументов у "Public Function Decrypt(fName As String) As String"
Как уже только и не пробывл переделать, всё бесполезно, только если n убрать, но тогда программа не так работает (Но пароль сохранлся в C:\Pass.txt в зашифрованном виде)
1
Devel
89 / 44 / 2
Регистрация: 02.11.2010
Сообщений: 261
13.08.2011, 22:44 #11
Найди
vb.net
1
Public Class Form1
(в самом верху, по умолчанию)
На следующей строке напиши:
vb.net
1
Private n As String
Добавлено через 3 минуты
Это моя ошибка. Извиняюсь

Добавлено через 7 минут
Цитата Сообщение от Ciberst Посмотреть сообщение
InstallGame, смысл этого шифрования нулевой, пароли так не хранят.

Не по теме:

То, что я скажу связано и с паролями, и с лицензионными ключами: Самый лучший способ защиты программы (игры) это проверка пароля (ключа) с сервером. Такую защиту внедрили в игру Trainz Simulator 12. Для игры в онлайн (да и в оффлайн) необходим: Аккаунт на Planet Auran, а также лицензионный ключ. Если ключ пиратский, игра не запускается. Если более одного аккаунта с одним ключом, данный ключ блокируется на сервере. Его больше не активируешь. Вот такая великолепная защита. Правда после внедрения такой защиты, да еще и мультиплеера сервера постоянно "лежат". Такая на них большая нагрузка

1
Памирыч
Почетный модератор
20838 / 8720 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
13.08.2011, 22:48 #12
Шифровать или не шифровать пароль и куда его помещать...
Все зависит от того, где программа находится и кто ею будет пользоваться.

У меня на работе есть программка, наподобие блокировки компьютера, я ее ставлю если надолго ухожу и на вечер/ночь, чтоб технички больше не рубились в контру.
Пароль банально лежит в System32, абсолютно ничем не зашифрован.
За все долгое время никто не лазал в комп, потому что овчинка выделки не стоит.
1
Devel
89 / 44 / 2
Регистрация: 02.11.2010
Сообщений: 261
13.08.2011, 22:51 #13
А если эта программа на продажу? Я придерживаюсь своего мнения:
ВСЕ ЛУЧШЕ ХРАНИТЬ НА СЕРВЕРЕ, ЕСЛИ ТАКОВЫЕ ИМЕЮТСЯ
1
Памирыч
Почетный модератор
20838 / 8720 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
13.08.2011, 22:58 #14
InstallGame, у нас все чаще внедряются веб-приложения, использующие такую схему.
Например, для отчетности в область.

Но не стоит забывать и о тех пользователях, у кого нет интернета или он запрещен.
0
GRAFMC
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 95
13.08.2011, 22:58  [ТС] #15
InstallGame, Всёравно та же ошибка: Слишком большое число аргументов у "Public Function Decrypt(fName As String) As String Пароль сохраняется в текстовик, но потом не загружается в TextBox, и при нажатии на кнопку пишет "Все верно" даже если они пусты. В чём может быть ошибка?
0
Devel
89 / 44 / 2
Регистрация: 02.11.2010
Сообщений: 261
13.08.2011, 23:04 #16
GRAFMC, если не конфиденциально скинь код.

Добавлено через 1 минуту
Цитата Сообщение от Памирыч Посмотреть сообщение
для отчетности в область.
Цитата Сообщение от Памирыч Посмотреть сообщение
нет интернета или он запрещен

Не по теме:

Пусть область интернет оплачивает

1
Памирыч
Почетный модератор
20838 / 8720 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
13.08.2011, 23:04 #17
Цитата Сообщение от GRAFMC Посмотреть сообщение
Слишком большое число аргументов у "Public Function Decrypt(fName As String) As String
Правильно говорит.
Потому, что Decrypt - сама является функцией, возвращающей строковые данные
Ну и
vb.net
1
     If TextBox2.Text = Decrypt("C:\Pass.txt") Then
1
Ciberst
507 / 420 / 19
Регистрация: 16.12.2010
Сообщений: 939
13.08.2011, 23:06 #18
Ну, например, вот так.
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Module Module1
    Dim Key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
    Dim IV As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
    Dim info As String = ""
    Sub Main()
        Console.WriteLine("Введите ваш Логин")
        Dim login As String = Console.ReadLine()
        If IO.File.Exists(My.Application.Info.DirectoryPath + "\" + login + ".CyberForum") Then GoTo m1
        info += vbCrLf + login
        Console.WriteLine("Введите ваш Город")
        info += vbCrLf + Console.ReadLine()
        Console.WriteLine("Введите ваш Пол")
        info += vbCrLf + Console.ReadLine()
        Console.WriteLine("Введите ваш Пароль")
        Key = toBytes(Console.ReadLine())
        'IV = Key
        Encrypt(info, My.Application.Info.DirectoryPath + "\" + login + ".CyberForum")
        Console.Clear()
m2:     Console.WriteLine("Введите ваш Логин")
        login = Console.ReadLine()
m1:     Console.WriteLine("Введите ваш Пароль")
        Key = toBytes(Console.ReadLine())
        ' IV = Key
 
        If Not IO.File.Exists(My.Application.Info.DirectoryPath + "\" + login + ".CyberForum") Then Console.WriteLine("Логин неверен") : GoTo m2
        Dim tmp As String = (Decrypt(My.Application.Info.DirectoryPath + "\" + login + ".CyberForum"))
        If tmp = Nothing Then
            Console.WriteLine("Пароль неверен")
            GoTo m1
        Else
            Console.WriteLine(tmp)
        End If
 
 
        Main()
    End Sub
    Private Function toBytes(ByVal pass As String) As Byte()
        Dim Key2() As Byte = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
        Key = Key2
        Dim bytes() As Byte = Key
        Dim tmp() As Byte = System.Text.Encoding.UTF8.GetBytes(pass)
        Dim i As Integer = tmp.Length
        If tmp.Length > 15 Then i = 15
 
        Array.Copy(tmp, bytes, i)
        Return bytes
    End Function
    Public Function Encrypt(ByVal txtEncrypt As String, ByVal fName As String)
 
        Dim RMCrypto As New Security.Cryptography.RijndaelManaged
        Dim fs As New IO.FileStream(fName, IO.FileMode.Create)
        Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateEncryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Write)
        Dim SWriter As New IO.StreamWriter(CryptStream, System.Text.Encoding.UTF8)
        SWriter.Write(txtEncrypt)
        SWriter.Close()
        fs.Close()
        CryptStream.Close()
        Return (txtEncrypt)
    End Function
    Public Function Decrypt(ByVal fName As String) As String
        Dim RMCrypto As New Security.Cryptography.RijndaelManaged
        Dim fs As New IO.FileStream(fName, IO.FileMode.Open)
        Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateDecryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Read)
        Dim SReader As New IO.StreamReader(CryptStream, System.Text.Encoding.UTF8)
 
        Try
            Decrypt = SReader.ReadToEnd()
            SReader.Close()
            CryptStream.Close()
            fs.Close()
        Catch ex As Exception
 
            ' SReader.Close()
            'CryptStream.Close()
            fs.Close()
            Return Nothing
        End Try
    End Function
End Module
Особо над алгоритмом не заморачивался, но пищу для размышления дам
минус кода - Ограничение: пароль 16 символов
2
Devel
89 / 44 / 2
Регистрация: 02.11.2010
Сообщений: 261
13.08.2011, 23:12 #19
GRAFMC, удали
vb.net
1
Public Function Decrypt(fName As String) As String
и еще две следующие строчки. И будет тебе счастье
1
GRAFMC
2 / 2 / 2
Регистрация: 09.08.2011
Сообщений: 95
13.08.2011, 23:27  [ТС] #20
Памирыч, Спасибо, при нажатии на кнопку стал загружаться пароль. Как сделать что бы программа запоминала положение птички "Сохранить пароль" что бы при повторном включении птичка оставалась.
т.е. я поставил если при загрузке программы стоит птичка, то пароль загружается в текстбокс:
vb.net
1
2
3
4
5
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If CheckBox1.Checked Then
            TextBox2.Text = Decrypt("C:\Pass.txt")
        End If
    End Sub
0
13.08.2011, 23:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2011, 23:27
Привет! Вот еще темы с решениями:

Как сделать автозапуск программы?
Что нужно сделать чтоб программа автоматически запускалась при загрузке...

Как сделать автообновление программы
Хочу сделать updater Нужно сделать чтобы при запуске программа сначала...

Как сделать копию программы
Нужно,чтобы программа копировала сама себя на диск,только без пути в коде

Закрытие программы после N неудачных попыток ввода пароля
Есть форма для ввода логина и пароля. Если пользователь.например, 3 раза ПОДРЯД...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru