Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
frech
34 / 34 / 3
Регистрация: 17.07.2008
Сообщений: 580
1

Пароль на приложение: возможность смены, а значит, надежное его хранение

09.01.2012, 19:26. Просмотров 859. Ответов 7
Метки нет (Все метки)

Всем привет. Есть приложение. Хочу создать два пользователя, и для каждого свой пароль. И чтоб они могли менять свой пароль. Посоветуйте, как реализовать, чтоб сохранить изменение пароля? Где сохранять новый пароль, чтоб потом сним сравнивать и осуществлять?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 19:26
Ответы с готовыми решениями:

Наиболее надежное хранение настроек и пароля
Здравствуйте друзья. Как будет правильно (более грамотно, безопасно) реализовать хранение...

Как скомпилировать приложение, чтобы иметь возможность его запуска на других ПК
Как собрать независимый exe из программы, написанной на QT, чтобы при передаче на другой компьютер...

Приложение требует ввести пароль, задача его узнать (декомпиляторы, dex)
Есть приложение, которое требует ввести пароль, задача его узнать. Имеем файл Test.apk и...

Заразил доки и поставил пароль а пароль забыл, не как его не взломать или не скинуть пароль с архива?
Зарарил доки и поставил пароль а пароль забыл, не как его не взломать или не скинуть пароль с...

Возможность смены темы приложения
Здравствуйте! Я недавно только перешел с WinForms на WPF, и у меня возникла такая проблема: Есть...

7
Public main
15 / 15 / 0
Регистрация: 06.11.2011
Сообщений: 53
09.01.2012, 19:57 2
Создать текстовый файл в ресурсах, и в него записывать. Естественно кодируя информацию(на всякий случай)
1
sau
2362 / 1827 / 327
Регистрация: 22.07.2011
Сообщений: 7,006
Завершенные тесты: 1
09.01.2012, 20:16 3
Ну или как вариант: SqlServerCompact+Membership
http://msdn.microsoft.com/ru-ru/library/d1b506ez.aspx
0
Casper-SC
Эксперт .NET
4093 / 1943 / 381
Регистрация: 27.03.2010
Сообщений: 5,345
Записей в блоге: 1
09.01.2012, 20:27 4
Цитата Сообщение от Public main Посмотреть сообщение
Создать текстовый файл в ресурсах, и в него записывать. Естественно кодируя информацию(на всякий случай)
Записывать в файл ресурсов, который в эксешнике?
1
Public main
15 / 15 / 0
Регистрация: 06.11.2011
Сообщений: 53
09.01.2012, 22:59 5
Да. Создаешь файл, добавляешь в ресурсы и наслаждаешься!
1
KarmaMaker
91 / 90 / 11
Регистрация: 09.12.2011
Сообщений: 233
10.01.2012, 00:35 6
Да. Создаешь файл, добавляешь в ресурсы и наслаждаешься!
И что это совсем совсем никак не ломается? В смысле насколько просто пароль от туда извлекается умелыми хакерскими ручками?
0
Casper-SC
Эксперт .NET
4093 / 1943 / 381
Регистрация: 27.03.2010
Сообщений: 5,345
Записей в блоге: 1
10.01.2012, 01:11 7
Лучший ответ Сообщение было отмечено как решение

Решение

Храни хэш код пароля в бинарном файле и всё.

C#
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
    class Program
    {
        static void Main(string[] args)
        {
            string collectionFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "oneUserFile.binTwo"); ;
            string oneUserFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "oneUserFile.binOne");
 
            List<UserAccount> users = new List<UserAccount>()
            {
                new UserAccount("Юзверь один", "hash code one"),
                new UserAccount("Юзверь два", "hash code two"),
                new UserAccount("Юзверь три", "hash code three")
            };
 
            string hashTest = "Пароль".GetHashCode().ToString();
            string hashTest2 = "Пароль".GetHashCode().ToString();
 
            Console.WriteLine("хэш 1: {0} --- хэш 2: {1}\n", hashTest, hashTest2);
 
            Console.WriteLine("До сохранения: Name: {0}; Hash: {1}", users[0].Name, users[0].Hash);
            UserAccount.Save(users[0], oneUserFile);
            UserAccount loadedAcc = UserAccount.LoadAccount(oneUserFile);
            Console.WriteLine("После загрузки с файла: Name: {0}; Hash: {1}", loadedAcc.Name, loadedAcc.Hash);
            Console.WriteLine();
 
            UserAccount.Save(users, collectionFile);
            List<UserAccount> usersLoaded = UserAccount.LoadAccounts(collectionFile);
            foreach (var acc in usersLoaded)
                Console.WriteLine(acc);
 
            File.Delete(oneUserFile);
            File.Delete(collectionFile);
            Console.ReadKey();
        }
    }
C#
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
80
81
82
83
using System.Collections.Generic;
using System.IO;
 
namespace ConsoleApplication1
{
    public class UserAccount
    {
        public UserAccount()
        {
            Name = string.Empty;
            Hash = string.Empty;
        }
 
        public UserAccount(string name, string hash)
        {
            Name = name;
            Hash = hash;
        }
 
        public string Hash { get; set; }
        public string Name { get; set; }
 
        public override string ToString()
        {
            return string.Format("Name: {0}; Hash: {1}", Name, Hash);
        }
 
        public static void Save(UserAccount userAccount, string fileName)
        {
            using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
            using (BinaryWriter binWriter = new BinaryWriter(fs))
            {
                binWriter.Write(userAccount.Name);
                binWriter.Write(userAccount.Hash);
            }
        }
 
        public static UserAccount LoadAccount(string fileName)
        {
            UserAccount userAccount = new UserAccount();
            using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (BinaryReader binReader = new BinaryReader(fs))
            {
                userAccount.Name = binReader.ReadString();
                userAccount.Hash = binReader.ReadString();
            }
            return userAccount;
        }
 
        public static void Save(List<UserAccount> userAccounts, string fileName)
        {
            using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
            using (BinaryWriter binWriter = new BinaryWriter(fs))
            {
                binWriter.Write(userAccounts.Count);
                for (int i = 0; i < userAccounts.Count; i++)
                {
                    binWriter.Write(userAccounts[i].Name);
                    binWriter.Write(userAccounts[i].Hash);
                }
            }
        }
 
        public static List<UserAccount> LoadAccounts(string fileName)
        {
            List<UserAccount> userAccounts = new List<UserAccount>();
            using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (BinaryReader binReader = new BinaryReader(fs))
            {
                int length = binReader.ReadInt32();
                userAccounts = new List<UserAccount>(length);
                for (int i = 0; i < length; i++)
                {
                    userAccounts.Add(new UserAccount());
                    userAccounts[i].Name = binReader.ReadString();
                    userAccounts[i].Hash = binReader.ReadString();
                }
 
            }
            return userAccounts;
        }
    }
}
Добавлено через 13 минут
А сами файлы храни в папке твоего приложения (всмысле не в той, в которой эксешник, во первых UAC не даст туда писать без прав администратора, если прога будет ставиться в Program Files). Ну чисто как пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    internal class AppFolders
    {
        /// <summary>Корневая папка для всех сохраняемых элементов программы</summary>
        public String MainData { get; private set; }
 
        /// <summary>
        /// Инициализирует пути к данным приложения
        /// </summary>
        /// <param name="rootDirectoryName">Название корневой папки для хранения данных приложения</param>
        public AppFolders(String rootDirectoryName)
        {
            MainData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), rootDirectoryName);
        }
    }
3
alex0nik
11 / 11 / 0
Регистрация: 16.10.2011
Сообщений: 33
07.02.2012, 18:45 8
У меня похожая ситуация, за исключением пары но.
Данные о пользователях буду хранить в БД, в связи с этим пара вопросов.
Я находил такие методы, чтобы MS SQL шифровал сам данные, но я использую Entity модель, и хочу её использовать не только для MS SQL, а для ряда бд, и уверен, что в разных бд методы шифрования устроены по разному.
Что бы вы посоветовали, чтобы хранить пароли в безопасной форме?
0
07.02.2012, 18:45
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2012, 18:45

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Возможность смены темы/стиля приложения в рантайме
Привет всем! Помогите разобраться. Хочу в рантайме иметь возможность смены стиля приложения....

У какого adsl роутера есть возможность смены IP с админки?
Собственно сабж, нужна возможность быстрой смены IP из интерфейса роутера, уже 3 роутер покупаю,...

Какова возможность смены пароля для пользователя с высоким уровнем доступа к информации
какова возможность, смены пароля для пользователя с высоким уровнем доступа к информации....


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

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

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