С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 15.05.2016
Сообщений: 14
1

Данные, защищенные паролем

21.03.2017, 13:14. Показов 648. Ответов 6

Author24 — интернет-сервис помощи студентам
Недавно начала изучать лисп и столкнулась с такой проблемой:
Есть процедура make-account которая создает счета, защищенные паролем. Непосредственно, что делать с самой процедурой я понимаю, а вот как защитить ее паролем - не совсем. Объясните, пожалуйста))

Вот код, но он не работает((
Lisp
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
#lang racket
(define (make-account balance password)
(define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Недостаточно денег на счете"))
(define (deposit amount)
(set! balance (+ balance amount))
balance)
  
       (define (secret-password sp)
         (cond ((= password sp)
              secret-password)
               (else (error "Неверный пароль"))))
  
(define (dispatch m)
(cond ((eq? m 'withdraw) withdraw)
((eq? m 'deposit) deposit)
 
       ((eq? m 'secret-password) secret-password)
 
(else (error "Неизвестный вызов -- MAKE-ACCOUNT"
m))))
dispatch)
 
(define acc (make-account 100 'secret-password))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2017, 13:14
Ответы с готовыми решениями:

Невозможно явно декларировать элементы, которые определены в пространстве имен, как частные, защищенные или защищенные внутренние
Приветствую! В общем ошибка такая: Ошибка 1 Невозможно явно декларировать элементы, которые...

Данные из файла Excel с паролем
Есть файлы с данными, где в одинаковых ячейках находятся значения (а точнее оценки по показателям)....

Вытащить данные с HDD после Win10 с паролем пользователя
Есть ноутбук. Установлена Win10, но произошел сбой файловой системы (по всей видимости). Перед...

Защищенные видео с YouTube
Не нашел подходящей ветки, поэтому решил написать свой вопрос тут. Гугл, что-то, тоже не помог. ...

6
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
21.03.2017, 14:37 2
Цитата Сообщение от Нейлирлин Посмотреть сообщение
Непосредственно, что делать с самой процедурой я понимаю, а вот как защитить ее паролем - не совсем.
А что вы понимаете под словами «защитить процедуру паролем»?
0
1 / 1 / 0
Регистрация: 15.05.2016
Сообщений: 14
21.03.2017, 14:41  [ТС] 3
Например, объект-счет должен обрабатывать запрос, если они сопровождаются паролем, с которым счет был создан, а в противном случае он должен жаловаться.
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
21.03.2017, 15:09 4
Тогда вам надо в dispatch перед cond-ом добавить проверку пароля. То есть dispatch будет функцией двух переменных: dispatch m password. Проверку пароля будет осуществлять функция check-password, которая сравнивает данный password с secret-password аккаунта и возвращает логическое значение. Если #t, будет выполняться следующее действие, а если #f — жаловаться. В наивной реализации можно просто сравнить строки, а на самом деле надо secret-password хранить в зашифрованном виде и, соответственно, шифровать password перед сравнением.

Попробуйте написать — посмотрим, что получится. Если будут ошибки или неожиданное поведение — пишите, какие ошибки и какое поведение вас не устраивает. Догадываться трудно. Если прочитаете текст ошибки, есть даже вероятность, что сами её исправите.

То, что функция balance в случае ошибки возвращает строку — индусский код. Пусть она лучше возвращает #f или ошибку кидает. Имейте в виду, что обрабатывать логические значения проще, чем отлавливать ошибки.
0
1 / 1 / 0
Регистрация: 15.05.2016
Сообщений: 14
12.05.2017, 19:36  [ТС] 5
Как-то так))

Lisp
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
(define (make-account balance password)
  (define (wrong-passwd arg) "Incorrect password")
  (define (withdraw amount)
    (if (>= balance amount)
           (begin (set! balance (- balance amount))
                  balance)
       "Insufficient funds"))
    (define (deposit amount)
    (set! balance (+ balance amount))
    balance)
  (define (dispatch passwrd m)
    (if (eq? passwrd password)
      (cond ((eq? m 'withdraw) withdraw)
              ((eq? m 'deposit) deposit)
              (else (error "Unknown request -- MAKE-ACCOUNT"
                m)))
       wrong-passwd))
  dispatch)
 
(define acc (make-account 100 'secret-password))
 
(display ((acc 'secret-password 'withdraw) 40)) (newline)
(display ((acc 'secret-password 'withdraw) 40)) (newline)
(display ((acc 'secret-password 'withdraw) 40)) (newline)
(display ((acc 'some-other-password 'deposit) 50)) (newline)
1
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
12.05.2017, 19:50 6
Ну вы вспомнили.

Пароль — это вообще-то обычно строка. Для сравнения строк в строке 12 надо использовать не eq?, а string=? https://docs.racket-lang.org/r... rings.html.

По-моему, с направильным паролем у вас должно работать неправильно, потому что в строке 17 вы возвращаете wrong-passwd, а не вызываете её (скобок нет). И аргументы этой функции вроде не нужны. И вообще можно было бы не писать отдельную функцию wrong-passwd, а просто написать (error "Wrong password!!!!"). А так ― вроде нормально.
1
1 / 1 / 0
Регистрация: 15.05.2016
Сообщений: 14
12.05.2017, 19:57  [ТС] 7
Да, как-то я немного задержалась с ответом
Спасибо Вам большое за помощь))
0
12.05.2017, 19:57
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2017, 19:57
Помогаю со студенческими работами здесь

Защищённые листы в Excel
Доброго времени суток товарищи! Подключаюсь через ADO к Excel такой строкой подключения: string...

Наследование и защищенные члены
Добрый день всем. У меня имеется следующий набор классов Visitor <- User <- Manager <- Admin...

Как удалить защищённые папки
Доброго времени суток! Подскажите пжлст., как удалить папку на которую выдаёт окно "Вам необходимо...

HttpRequest.Cookies защищённые куки
Добрый день ФЫорумчане! Есть небольшой код C#: string source = string.Empty; using...

Поиск файлов. Защищенные файлы.
Здравствуйте, возник вопрос. Этот фрагмент кода перебирает все файлы во всех папках в диске С и...

Защищенные ноутбуки с COM-портом в С-Петербурге
Предлагаем вашему вниманию ноутбуки с COM-портом. Имеются в наличии ноутбуки для профессиональных...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru