Вам нужно реализовать UnmarshalText
вместо UnmarshalJSON
. Из документации :
Значения карты кодируются как объекты JSON. Тип ключа карты должен быть либо строкой, целочисленным типом, либо реализовывать encoding.TextMarshaler.
blockquote>func (t *Tier) UnmarshalText(data []byte) error { switch string(data) { case "TIER1": *t = 1 case "TIER2": *t = 2 default: return errors.New("Unrecognized") } return nil }
Это - уловка - 22. Или Вы делаете пользовательский тип в его пароле каждым разом, или Вы храните его небезопасно (запутываемый, зашифрованный, безотносительно).
Способ зафиксировать это состоит в том, чтобы больше операционных систем включило встроенные менеджеры паролей - как Связка ключей OS X. Тем путем Вы просто храните свой пароль в Связке ключей, ОС сохраняет это безопасным, и пользователь только должен ввести в 1 основном пароле. Много приложений (как Skype) на OS X использует Связку ключей, чтобы сделать точно, что Вы описываете.
Но так как Вы, вероятно, используете Windows, я сказал бы, просто идут с некоторой путаницей и шифрованием. Я думаю, что можно быть немного параноиками о ботах кражи пароля; если Ваше приложение не имеет большой базы пользователей, разногласия являются довольно низкими, что кто-то будет нацелен на него и конкретно попытается украсть пароли. Помимо этого, у них должен был бы также быть доступ к файловой системе их жертвы. Если это так, они, вероятно, имеют вирус/червя и имеют большие проблемы.
После дальнейшего рассмотрения я думаю, что нашел путь. Я буду использовать аутентификацию ASP.net для своего настольного приложения приложения, хранить их учетные данные онлайн и позволять менеджеру паролей Internet Explorer обработать локальное кэширование этой вторичной пары или учетных данных для меня.
Я должен буду просто сделать, чтобы они прошли проверку подлинности через Facebook-API как форма во время первого входа в систему.
Я не получаю его..., почему шифрование бесполезно? Используйте большой ключ и сохраните ключ в базе ключей машины (принимающий Windows). Сделанный и сделанный.
Я думаю, что Вы пропускаете большее изображение здесь:
Если рабочий стол поставлен под угрозу, Вы - F#* % ED!
Для кражи пароля из программы вирус должен был бы работать на системе как администратор. Если вирус достиг этого, кража паролей из Вашей программы является путем вниз на, он - список злонамеренных вещей, которые это хочет сделать.
Сохраните его в виде обычного текста и дайте знать пользователю .
Таким образом, не возникнет неправильных представлений о том, какой уровень безопасности вы достигли. Если пользователи начнут жаловаться, рассмотрите xor'ing константы, опубликованной на вашем веб-сайте. Если пользователи продолжают жаловаться, «спрячьте» константу в своем коде и скажите им, что это плохая защита.
Если пользователи не могут уберечь плохих людей из коробки, то фактически все секретные данные, которые у них есть известен Доктору Злу. Неважно, зашифровано оно или нет. И если они могут не подпускать злых людей, зачем беспокоиться о том, чтобы хранить пароли в виде обычного текста?
Я, конечно, мог бы говорить здесь свою задницу. Есть ли исследование, показывающее, что хранение паролей в виде обычного текста приводит к худшей безопасности, чем их запутывание?