Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Вниз

Работа с cache   Найти похожие ветки 

 
Lexa ©   (2005-08-08 04:00) [0]

Добрый вечер!

Не могу найти ответ на следующий вопрос: есть переменная(текстовая, например), ей присваивается некоторое значение. Могу ли я получить доступ к кэшированной информации об этой переменной (на диск сохранить, например)? Если да, то возможно ли впоследствии загрузить из файла это значение и вновь связать его с этой же переменной?

Может быть кто-нибудь может задать направление дальнейших поисков по этому вопросу? (т.е. в общем работа с кэш).

Благодарю!


 
Юрий Зотов ©   (2005-08-08 04:30) [1]

S - строка.

S[1] - начало тела строки в памяти. Адрес тела (если он нужен) дает операция @ - например, @S[1].

Length(S) - длина тела строки.

Записать на диск - например, обычная Write, читать - обычная Read.

Что имеется в виду под термином "кэшированная информация" - в данном случае неясно.


 
Lexa ©   (2005-08-08 04:54) [2]


> Юрий Зотов ©   (08.08.05 04:30) [1]


Не так давно я задавал вопрос о том, как реализовать хранение пароля на доступ к приложению, т.е. с тем, чтобы пользователь мог его изменить. (вопрос был удален). Если не ошибаюсь, Anatoly Podgoretsky успел ответить, что хранить следует не пароль, а его кэш. Я нашел знаменитый ответ на знаменитый вопрос: "Как сбросить на диск кэшированную информацию о бинарном файле". Там использовалась функция FlushFileBuffers()
По данной функции я нашел следующее описание: "очищает буфер для указанного файла и заставляет все буферезированные данные быть записанными в этом файле".
С этим примером все ясно, но вот мое представление о соотношении Buffer - Cash стало совсем мутным. Поэтому я прошу помочь мне соориентироваться - в каком направлении искать информацию.

З.Ы. Прошу извинить за мутность формулировок.


 
Alexander Panov ©   (2005-08-08 05:06) [3]

К сожалению, то ли знаменитые опечатки Анатолия Подгорецкого ввели тебя в заблуждение, то ли еще что, но тебе нужен не кэш, а хэш-функции. Думаю, что после этого уточнения тебе все же смогут помочь.


 
Lexa ©   (2005-08-08 05:13) [4]

Alexander Panov ©   (08.08.05 05:06) [3]

Спасибо :)
Вообще-то ответа было два: Fay, кажется, написал именно "хэш".
Я подумал, что опечатка была во втором случае...


 
Юрий Зотов ©   (2005-08-08 06:00) [5]

> Lexa ©   (08.08.05 04:54) [2]

Похоже, идет путаница понятий "кэш" и "хэш".

Кэш (cache) - в общем случае, это буфер, в котором накапливается информация. Например, программа пишет что-то на диск порциями по 1 байту. Дисковые операции - штука довольно медленная, поэтому выгоднее не писать каждый раз по 1 байту, а накапливать записываемую информацию в памяти, в каком-то промежуточном буфере (кэше), а когда ее накопится достаточно много (кэш заполнится) - то разом записать всю ее на диск. Так и поступает Windows, но если программа вызывает FlushFileBuffers, то это означает приказ сбросить кэш на диск немедленно, независимо от того, насколько он заполнен - полностью, или нет. Тем самым гарантируется, что вся информация, которую программа хотела записать, действительно попала на диск, а не зависла в кэше.

Хэш (hash) - это совсем другое. Это как бы "образ" строки. Есть много (вообще говоря, бесконечное множество) способов создания такого образа. Рассмотрим простейший пример. Пусть есть строка "ВАСЯ". Каждый ее символ имеет определенный код в таблице ASCII. Сложим эти коды: 194 + 192 + 209 + 223 = 818. Вот число 818 - это и будет хэш строки "ВАСЯ", полученный по правилам выбранного нами алгоритма (сложение кодов). Ну а раз таких алгоритмов можно придумать бесконечно много, то и хэшей можно получить тоже бесконечно много. И еще: хэш - это не шифр, его невозможно взломать и однозначно восстановить исходную строку, даже если известен алгоритм получения хэша (вот есть число 818 - как получить из него именно "ВАСЯ"? ведь сушествует еще огромное множество строк, для которых сложение кодов их символов тоже даст 818).

Итак, юзер вводит пароль. Программа по какому-то известному ей алгоритму преобразует его в хэш и сравнивает этот хэш с заранее запомненным. Если хэши совпали - все ОК, работаем. Обратите внимание, что сравнивается хэш, а не сам пароль - значит, нет необходимости хранить сам пароль, нужно хранить только его хэш.

В чем преимущество хранения хэша пароля вместо самого пароля? В том, что тогда пароль невозможно украсть, даже если найти место хранения. Раз там хранится только хэш, то только хэш оттуда и можно будет украсть - но ведь это ничего не даст, если неизвестен алгоритм хэширования. Значит, для взлома программы придется еше и ломать алгоритм получения хэша (или подбирать строку, дающую тот же кэш) - а это намного сложнее.


 
Lexa ©   (2005-08-08 06:23) [6]

Юрий Зотов ©   (08.08.05 06:00) [5]

Большое спасибо, Юрий! Ситуация прояснилась)


 
Anatoly Podgoretsky ©   (2005-08-08 08:59) [7]

Простой, очень простой пример хеширования
Hash := Hash + A(I)
Сложим три числа D := A + B + C
Пусть результат равет 127, вопрос чему равны A, B, C



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.011 c
2-1123366404
msm
2005-08-07 02:13
2005.09.11
Преобразование минуты:секунды в секунды


1-1124632605
chortik
2005-08-21 17:56
2005.09.11
scrollbar


1-1124658022
Ramin
2005-08-22 01:00
2005.09.11
Windowsmediaplayer


14-1124171482
Jamik
2005-08-16 09:51
2005.09.11
Аналитика по торговлю


6-1116820908
Игорь Лан
2005-05-23 08:01
2005.09.11
Ошибка 10060 что означает?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский