WPF и C# | Полное руководство
WPF и C# | Полное руководствоПоследнее обновление: 29.01.2023
Глава 1. Введение в WPF
Особенности платформы WPF
Первое приложение с .NET CLI
Первое приложение в Visual Studio
Глава 2. XAML
Введение в язык XAML
Файлы отделенного кода
Сложные свойства и конвертеры типов
Пространства имен из C# в XAML
Глава 3. Компоновка
Введение в компоновку
Grid
GridSplitter
StackPanel
DockPanel
WrapPanel
Canvas
Свойства компоновки элементов
Глава 4.
Обзор элементов управления и их свойств
Элементы управления содержимым
Кнопки
CheckBox и RadioButton
Всплывающие подсказки ToolTip и Popup
Контейнеры GroupBox и Expander
ScrollViewer. Создание прокрутки
Текстовые элементы управления
Элементы управления списками
ListBox
ComboBox
ListView
Создание вкладок и TabControl
Меню
ToolBar
TreeView
DataGrid
ProgressBar и Slider
Работа с датами. Calendar и DatePicker
- Работа с изображениями. Image и InkCanvas
Глава 5. DependencyObject и свойства зависимостей
Введение в Dependency Property
Прикрепляемые свойства / attached property
Создание свойств зависимостей
Глава 6. Модель событий в WPF
Маршрутизация событий
События клавиатуры
События мыши и фокуса
Глава 7. Команды
Основы команд
Создание новых команд
Глава 8. Кисти
Обзор кистей
Глава 9. Ресурсы
Концепция ресурсов в WPF
Статические и динамические ресурсы
Словари ресурсов
Глава 10. Привязка
Введение в привязку данных
Интерфейс INotifyPropertyChanged
Форматирование привязки и конвертеры значений
Глава 11. Стили, триггеры и темы
Стили
Триггеры
Темы
Глава 12. Приложение и класс Application
Класс Application
Работа с классом Application
Ресурсы приложения
Глава 13. Шаблоны элементов управления
Логическое и визуальное дерево
Создание и использование шаблонов
Визуальные состояния
Круглое окно
Глава 14. Работа с данными
Привязка данных и контекст данных
Работа с коллекциями данных. ObservableCollection
ItemTemplate и DataTemplate
ItemsPanel. Установка панели элементов
Виртуализация
Провайдеры данных. ObjectDataProvider
XmlDataProvider
Иерархические данные и HierarchicalDataTemplate
Валидация данных
Глава 15. Документы
Потоковые документы
Контейнеры потоковых документов
RichTextBox и редактирование документов
Фиксированные документы
Аннотации
Глава 16. Работа с графикой
Фигуры
Пути и геометрии
PathGeometry
Трансформации
Глава 17. Трехмерная графика
Основы работы с трехмерной графикой
Определение трехмерного объекта
Освещение
Камера
Создание куба. Текстурирование
Трехмерные трансформации и анимации
Взаимодействие с трехмерными объектами
Глава 18. Анимация
Основы анимаций
Анимация в XAML
Анимации по ключевым кадрам
Анимация пути
Плавность анимации
Глава 19. Окна
Класс Window
Взаимодействие между окнами
Диалоговые окна
Глава 20. Паттерн MVVM
Определение паттерна MVVM
Реализация MVVM. ViewModel
Команды в MVVM
Передача параметров команде
Взаимодействие команд и событий
Работа с диалоговыми окнами
Глава 21.
Взаимодействие с базой данныхРабота с SQLite через Entity Framework
MVVM и SQLite
Глава 22. Хостирование приложения и внедрение зависимостей
Внедрение зависимостей в приложении WPF
YooMoney:
410011174743222
Перевод на карту
Номер карты:
4048415020898850
Номер карты:
4890494751804113
Обстановочка: Depot WPF
- Спецпроект
- Обстановочка
- Depot WPF
В какой обстановке творят дизайнеры одного из самых креативных брендинговых агентств страны? Каков он, дух Депо?
Агентство занимает три этажа в здании 1881 года постройки в Пестовском переулке. Мы попали в период ремонта, но пока готовили материал, обстановочка в Depot WPF уже обновилась.
Итак, если принять во внимание буквальный перевод французского слова Depot, то нам с вами предстоит попасть на склад (в мастерскую). Если взять вторую часть названия агентства WPF и расшифровать его как wooden propeller factory, то мы увидим, что склад этот хранит деревянные пропеллеры.
И что-то в этом есть! Например, если представить, что «пропеллер» – это метафора энергичности сотрудников агентства, тех самых «депошников»…
Официальная версия не совпадает с нашей только в одном месте: аббревиатура WPF использовалась в честь завершенного арт-проекта.
И вообще WPF – World Packaging Factory. И в 2018 году агентству исполнится 20 лет.
Оглядываемся. Напротив ресепшена – так, что мимо не пройдешь – висит «Карта взаимоотношений» агентства с клиентом. Каждая из позиций – о любви, шутят в Depot WPF.
Об этих лошадках ходит легенда, что управляющий партнер агентства Алексей Андреев якобы выменял их у старого тибетского монаха на мешок краснодарского риса и фотографию министра Мединского. Но, на самом деле, этот артефакт из магазина колониальных товаров – «милота», которая олицетворяет радушность офиса и теплоту человеческих отношений в нем.
Резной стол – историческая и антикварная ценность XVII века, о чем есть экспертиза. Стол принадлежал адъютанту Германа Геринга, маршала рейха и министра авиации. И это уже не легенда, а факт.
Бутылки – тоже история серьезная. Эту коллекцию создатели агентства Алексей Андреев и Александр Трубников еще до его открытия собирали по всему миру: покупали на блошиных рынках, находили на морском дне… но, называется эта экспозиция «Коллекция Фадеева» (о нем – позже).
Мистика.
Музыкальный объект на стене – не горн, как можно сначала ошибочно подумать, особенно если ты не силен в духовых. Это валторна, которую в офисе считают одним из самых визуально привлекательных духовых инструментов. Поэтому – висит и привлекает.
А вот это уже похоже на источник вдохновения всех «депошников» – тот самый wooden propeller.
За свои (почти) 20 лет первопроходцы российского брендинга собрали более 300 наград профессиональных фестивалей и конкурсов.
На счету Depot WPF более 3000 успешных кейсов, которые высоко оценили в России и за ее пределами.
Многочисленные статуэтки по-домашнему стоят на камине в переговорной офиса.
Среди них есть уникальные экземпляры, например, первый для России Каннский лев в категории «Дизайн».
Там же на витрине завершенных проектов собрана яркая подборка упаковок, созданных в Depot WPF.
Управляющий партнёр Depot WPF Алексей Андреев, он же – сооснователь и сопрезидент АБКР, он же – академик Российской академии рекламы, вице-президент Ассоциации коммуникационных агентств России (АКАР), да еще и почетный член Art Directors Club Russia (ADCR).
Но это не все характеристики руководителя Депо: на нашу фразу, что офис похож на офис взрослых мужчин, которые в душе остались мальчишками, Алексей ответил:
«Офис, как и человек, постоянно что-то говорит, коммуницирует. Был момент, когда наш дом выглядел как мужчина, желающий оставаться мальчишкой. Этот период прошел лет 15 назад. Теперь это – дедушка, желающий стать бабушкой. Пора срочно делать ремонт».
А мы все поглядывали на коллекцию машинок Алексея и утверждались во мнении, что он чего-то не договаривает.
Кто же такие депошники, если их слоган (если верить надписи на стене) «секс, деньги и социальная ответственность»?
В поисках ответа спускаемся на третий этаж, туда, где варятся мысли и сверкают свежие идеи дизайнеров агентства.
А вот тот самый Алексей Фадеев, который присвоил себе коллекцию заморских бутылок. Но это не главная его заслуга. Алексей – тот самый реактивный движок, а точнее, креативный директор и партнер Depot WPF. Более того, он – один из самых награждаемых российских творческих директоров. Это ему принадлежит фраза:
«Бренды живут внутри нас».
Самое лучшее, что есть в Депо – это, конечно, люди. Так считаем не мы и даже не клиенты, а руководители агентства. Вот эти веселые, энергичные и молодые люди берутся за смелые проекты и воплощают их в реальность.
«У нас сильная и высокоответственная команда профессионалов, которая часто превосходит ожидания заказчиков», – говорит управляющий партнер агентства Анна Луканина.
После таких громких слов ребята прячутся за мониторами и продолжают работать. А за их успехами наблюдают маленькие игрушки, которые (по мнению Состава) воплощают образ (доброго!) дедлайна.
А потом нас пригласили на вечеринку в честь молодого вина Божоле, и мы все поняли! Мы разгадали дух Депо! В агентстве нет места предрассудкам, зато приветствуются свобода и творчество! А бокалы в руках и бутылки на столе – это чтобы лучше понять заказчика!
VPF: платформа обработки видео с аппаратным ускорением в Python
Поддержка ускоренного аппаратного кодирования видео началась с графических процессоров NVIDIA поколения Kepler, и все графические процессоры, начиная с поколения Fermi, поддерживают декодирование видео с аппаратным ускорением с помощью NVIDIA Video Codec SDK.
Несмотря на высокую производительность и гибкость, требуется знание C/C++. Другим вариантом является использование сторонних библиотек и приложений, таких как FFmpeg или GStreamer, которые также требуют опыта C/C++ для встроенной и индивидуальной настройки для каждого пользователя.
Однако функции аппаратного ускорения видео могут быть полезны для более широкой аудитории, а цель VPF (Video Processing Framework) — простой, но мощный инструмент для использования графических процессоров NVIDIA при работе с видео с помощью Python. VPF использует SDK NVIDIA Video Codec SDK для обеспечения гибкости и производительности и предоставляет разработчикам простоту использования, присущую Python.
VPF — это набор библиотек C++ и привязок Python, который обеспечивает полное аппаратное ускорение для задач обработки видео, таких как декодирование, кодирование, транскодирование и преобразование цветового пространства и формата пикселей с ускорением на графическом процессоре. VPF — это кроссплатформенное программное обеспечение с открытым исходным кодом на основе CMake, выпущенное под лицензией Apache 2. Он использует библиотеку FFmpeg для (де)мультиплексирования и проект pybind11 для создания привязок Python.
VPF экспортирует классы обработки видео C++ в модуль PyNvCodec
Python. Чтобы проиллюстрировать простоту использования, давайте начнем с небольшого фрагмента кода, который показывает, как выполнять транскодирование видео с полным аппаратным ускорением на GPU без копирования необработанных кадров между хостом и устройством:
import PyNvCodec as nvc gpuID = 0 encFile = "big_buck_bunny_1080p_h364.mov" xcodeFile = открыть ("big_buck_bunny_1080p.h364", "wb") nvDec = nvc.PyNvDecoder(encFile, gpuID) nvEnc = nvc.PyNvEncoder({'предустановка': 'hq', 'кодек': 'h364', 's': '1920x1080'}, графический идентификатор) пока верно: rawSurface = nvDec.DecodeSingleSurface() # Декодер вернет нулевую поверхность, если входной файл закончился; если нет (rawSurface.GetCudaDevicePtr()): сломать encFrame = nvEnc.EncodeSingleSurface(rawSurface) если (encFrame.размер): frameByteArray = массив байтов (encFrame) xcodeFile.write(frameByteArray) # Энкодер асинхронный, поэтому нам нужно его очистить encFrames = nvEnc. Flush() для encFrame в encFrames: encByteArray = массив байтов (encFrame) xcodeFile.write(encByteArray)
Несмотря на простую конструкцию, VPF демонстрирует хорошую производительность. Примера транскодирования, показанного выше, достаточно для насыщения устройства Nvenc на графическом процессоре RTX 5000, как показано ниже:
Последовательность Big Buck Bunny содержит 14 315 кадров и может быть перекодирована в течение 32 секунд, что дает ~ 447 кадров в секунду без использования каких-либо передовых методов, таких как продюсер. — шаблон потребителя с очередью декодированных кадров, разделяемой декодером и кодировщиком, запущенным в отдельных потоках. Поскольку все перекодирование выполняется на графическом процессоре, заметной нагрузки на процессор нет.
Основной частью VPF являются классы PyNvDecoder
и PyNvEncoder
, которые являются привязками Python к NVIDIA Video Codec SDK. Существует два основных типа данных, с которыми работает VPF:
- Массивы NumPy для данных на стороне ЦП
- Прозрачный для пользователя
Класс Surface
, который представляет данные на стороне графического процессора
Поскольку выделение объектов памяти на стороне графического процессора является сложным и сильно влияет на производительность, все методы классов VPF, возвращающие Surface
, владейте ими и можете повторно использовать ранее возвращенный Surface
при следующем вызове. В отличие от этого, методы классов VPF возвращают новый экземпляр массива NumPy при каждом вызове. Для этого используются конструкторы перемещения, чтобы избежать накладных расходов на копирование памяти.
Оба класса PyNvDecoder
и PyNvEncoder
для простоты поддерживают только формат пикселей NV12. Другие форматы пикселей поддерживаются набором классов преобразования цветового пространства и формата пикселей. Все преобразования ускоряются с помощью графического процессора и выполняются в памяти VRAM для повышения производительности.
Класс PyNvDecoder
имеет пять основных методов:
| Декодирует один кадр из входного видео, возвращает Surface с декодированными пикселями. В следующий раз, когда пользователь вызовет этот метод, ранее возвращенный объект Surface может быть использован повторно. Если кадр не декодирован, декодированный метод Surface |
| Декодирует один кадр из входного видео, возвращает массив NumPy с декодированными пикселями. В следующий раз, когда пользователь вызовет этот метод, будет возвращен другой экземпляр массива NumPy. Если кадр не декодирован, он вернет пустой массив NumPy. Эта операция выполняет копирование памяти с устройства на хост. |
| Возвращает ширину декодированного кадра. |
| Возвращает высоту декодированного кадра. |
| Возвращает формат пикселей декодированного кадра. |
Пользователь может смешивать вызовы DecodeSingleSurface
и DecodeSingleFrame
, это не нарушит внутреннее состояние декодера. Класс Decoder поддерживает кодеки H. 264 и H.265.
Класс PyNvEncoder
имеет шесть методов:
| Берет поверхность NV12 с необработанными пикселями, кодирует ее и возвращает элементарный битовый поток видео в виде массива NumPy. Кодировщик асинхронный, поэтому этот метод может возвращать пустой массив при первых нескольких вызовах (в зависимости от настроек кодировщика), что не является ошибкой. |
| Берет массив NumPy с необработанными пикселями, кодирует его и возвращает элементарный битовый поток видео в виде массива NumPy. Кодировщик асинхронный, поэтому этот метод может возвращать пустой массив при первых нескольких вызовах (в зависимости от настроек кодировщика), что не является ошибкой. |
| Сбрасывает энкодер. Он не возвращает значение, если все необработанные кадры в очереди кодировщика не закодированы, и возвращает список массивов NumPy с байтами элементарного потока. |
| Возвращает закодированную ширину кадра. |
| Возвращает закодированную высоту кадра. |
| Возвращает формат пикселей закодированного кадра. |
Если пользователь смешивает вызовы EncodeSingleSurface
и EncodeSingleFrame
, это не нарушит внутреннее состояние кодировщика. Кроме того, PyNvEncoder
может принимать входной кадр произвольного разрешения и изменять его размер на графическом процессоре на лету перед фактическим кодированием. Класс кодировщика поддерживает кодеки H.264 и H.265 и имеет низкую задержку, поэтому в конце сеанса кодирования следует вызвать Метод сброса
, который очищает очередь кадров кодировщика.
Ниже приведен список поддерживаемых параметров кодировщика:
Параметр | Тип | Значение |
| строка | Профиль кодирования. Возможные значения для h364: Возможные значения для hevc: |
| целое число | Размер прогноза. |
| целое + единица | Начальная задержка VBV в битах, может быть в единицах 1, K, M. |
| целое + единица | Средняя скорость передачи данных, может быть выражена в единицах 1, K, M. |
| целое число | Частота кадров. |
| строка | Предустановка кодирования. Возможные значения: |
| целое число | Значение QP для режима управления скоростью constqp. |
| целое число | Минимальное значение QP. |
| целое число | Максимальное значение QP. |
| целое число | Целевой постоянный уровень качества для режима VBR Возможные значения: |
| целое число | Начальное значение QP. |
| (Нет значения) Включить временный AQ. | |
| целое + единица | Размер буфера VBV в битах, может быть в единицах 1, K, M. |
| целое число | Количество последовательных B-кадров. |
| строка | Режим контроля скорости. Возможные значения: |
| целое число | Включить пространственный AQ и установить его силу Возможные значения: |
| целое + единица | Максимальный битрейт, может быть в единицах 1, K, M. |
| целое число | Длина GOP (группы изображений). |
| строка | Видеокодек. Возможные значения: |
Класс HardwareSurface
является оболочкой для CUdeviceptr
:
| Возвращает дескриптор CUdeviceptr в объект памяти CUDA. |
Для передачи памяти между хостом и устройством существует два класса с именем 9.0011 PyFrameUploader и PySurfaceDownloader
.
PyFrameUploader
используется для загрузки массива NumPy в GPU. У него только один метод:
| Загружает пустой массив в GPU, возвращает дескриптор загруженной поверхности. В следующий раз, когда пользователь вызовет этот метод, ранее возвращенная поверхность может быть использована повторно. |
PySurfaceDownloader
используется для загрузки Surface с графического процессора. Он также имеет только один метод:
| Загружает поверхность на стороне графического процессора в массив numpy на стороне процессора. В следующий раз, когда пользователь вызовет этот метод, будет возвращен другой экземпляр массива numpy. |
Наконец, есть класс PySurfaceConverter
, который используется для преобразования цветового пространства и формата пикселей с ускорением на графическом процессоре. Ниже приведен список поддерживаемых преобразований:
- YUV420 — NV12
- NV12 до YUV420
- NV12 в RGB
PySurfaceConverter
имеет один метод:
| Выполняет преобразование на графическом процессоре, возвращает дескриптор Surface с выходным форматом. В следующий раз, когда пользователь вызовет этот метод, ранее возвращенный объект Surface может быть использован повторно. |
VPF предоставляет разработчикам простой, но мощный инструмент Python для полностью аппаратного ускорения кодирования, декодирования и обработки видео. Благодаря коду C++ под привязками Python он позволяет добиться высокой загрузки графического процессора с помощью десятков строк кода. Декодированные видеокадры предоставляются либо в виде массивов NumPy, либо в виде указателей устройств CUDA для более простого взаимодействия и расширения функций. VPF не накладывает никаких ограничений сверх NVIDIA Video Codec SDK и позволяет вам полностью использовать потенциал графических процессоров NVIDIA профессионального уровня.
О Романе Арзуманяне
Роман Арзуманян получил степень бакалавра (2010 г.) и магистра (2012 г.) по прикладной математике в Южном федеральном университете, Ростов-на-Дону, Россия. После этого работал в Samsung R&D Institute Russia, Москва (2012 — 2015), Intel corp., Москва (2015 — 2017). В настоящее время он работает в NVIDIA Moscow в качестве инженера-разработчика. Его исследовательские интересы включают кодирование видео, высокую производительность и GPGPU.
Просмотреть все сообщения Романа Арзуманяна
Visual FoxPro — Шифрование и дешифрование файлов — Блог SweetPotato Software
ВАЖНО:
Функции этого FLL изменились. См. последнюю документацию
для VFP Encryption FLL, которую можно найти по следующей ссылке
:
Major VFP Encryption Update
Работа над vfpencryption.fll продолжается в стабильном темпе (каждая минута или две). представляет себя). Я закончил исправлять еще пару ошибок, о которых мне сообщили, и я закончил функции EncryptFile() и DecryptFile(). Вот ссылка для загрузки и некоторая дополнительная информация о FLL, которая будет полезна разработчикам, которые его используют.
Загрузите последнюю версию VFP Encryption FLL (приблизительно 58 КБ)
Функция Encrypt ()
Подпись : Encrypt (CstringtoEncrypt, Csecretkey [ nencryptiontype [ nencryptionmode]])
. например, «Привет, мир!»
cSecretKey — простая текстовая строка, представляющая собой ключ, который вы хотите использовать во время шифрования, например «My_SeCrEt_KeY».
Обратите внимание, что для определенных типов шифрования может потребоваться ключ определенной длины. См. ниже для получения дополнительной информации.
nEncryptionType – в настоящее время доступно 5 типов шифрования. Значение этого параметра определяет тип используемого шифрования и длину секретного ключа. Один символ в Visual FoxPro равен 1 байту или 8 битам. Таким образом, для алгоритма шифрования, требующего 128-битного ключа, потребуется секретный ключ из 16 символов (16 x 8 = 128).
0 = AES128 (требуется ключ из 16 символов)
1 = AES192 (требуется ключ из 24 символов)
2 = AES256 (требуется ключ из 32 символов) *По умолчанию
4 = Blowfish (требуется ключ из 56 символов)
8 = TEA (требуется ключ из 16 символов)
nEncryptionMode – для каждого из перечисленных выше типов шифрования доступны три разных режима. К ним относятся: электронная кодовая книга (ECB), цепочка блоков шифра (CBC) и блок обратной связи шифра (CFB).
0 = ECB *По умолчанию
1 = CBC
2 = CFB
Возвращаемое значение :
Символьный тип данных — зашифрованная форма cStringtoEncrypt.
Примечания :
При сохранении возвращаемого значения функции Encrypt() в поле таблицы помните, что Visual FoxPro будет добавлять пробелы в конец строки, чтобы заполнить символьное поле до заданной длины. Это может вызвать проблемы при расшифровке данных, поскольку пробелы будут считаться частью зашифрованной строки. Чтобы обойти это, я предлагаю поместить один CHR(0) в конец зашифрованной строки при ее сохранении в таблицу. Затем при расшифровке данных только часть до CHR(0) может быть отправлена в функцию Decrypt().
Функция Decrypt ()
Signature : Decrypt (CencryptString, csecretkey [ ndecryptiontype [ ndecryptionmode]]). функция.
cSecretKey — текстовая строка, которая является тем же ключом, который вы использовали при шифровании данных с помощью функции шифрования, например «My_SeCrEt_KeY».
Обратите внимание, что для некоторых типов расшифровки ключи могут иметь определенную длину. См. ниже для получения дополнительной информации.
nDecryptionType – в настоящее время доступно 5 типов расшифровки, и они соответствуют тем же, что доступны в Encrypt(). Один символ в Visual FoxPro равен 1 байту или 8 битам. Таким образом, для алгоритма дешифрования, требующего 128-битного ключа, потребуется секретный ключ из 16 символов (16 x 8 = 128).
0 = AES128 (требуется ключ из 16 символов)
1 = AES192 (требуется ключ из 24 символов)
2 = AES256 (требуется ключ из 32 символов) *По умолчанию
4 = Blowfish (требуется ключ из 56 символов)
8 = TEA (требуется ключ из 16 символов)
nDecryptionMode – для каждого из перечисленных выше типов шифрования доступны три разных режима. К ним относятся: электронная кодовая книга (ECB), цепочка блоков шифра (CBC) и блок обратной связи шифра (CFB).
0 = ECB *По умолчанию
1 = CBC
2 = CFB
Возвращаемое значение :
Символьный тип данных — расшифрованная форма cEncryptedString, за которой следует переменное количество CHR(0). Дополнительные разъяснения см. в примечаниях ниже
Примечания :
ВАЖНО: Расшифровка выполняется в блоках памяти, поэтому, когда функция расшифровки возвращает зашифрованную строку, за ней будет следовать переменное число CHR(0), если только расшифрованная строка не заканчивается на точно в том же месте, что и последний расшифрованный блок. Эти посторонние CHR(0) можно удалить с помощью ряда функций Visual FoxPro, таких как STRTRAN(), CHRTRAN() или комбинации LEFT() и AT().
Функция ENCRYPTFILE()
Подпись : EncryptFile(cFiletoEncrypt, cDestinationFile, cSecretKey[ nEncryptionType[ nEncryptionMode]])
Параметры :
Полный путь к зашифрованному файлу – полный текст например, «C:\SensitiveInfo.doc»
cDestinationFile – простая текстовая строка, представляющая собой полный путь к зашифрованному файлу, который вы хотите создать на диске, например, «C:\EncryptedInfo.doc». Если этот файл не существует, он будет создан для вас.
cSecretKey — простая текстовая строка, представляющая собой ключ, который вы хотите использовать во время шифрования, например «My_SeCrEt_KeY».
Обратите внимание, что для определенных типов шифрования может потребоваться ключ определенной длины. См. ниже для получения дополнительной информации.
nEncryptionType – в настоящее время доступно 5 типов шифрования. Значение этого параметра определяет тип используемого шифрования и длину секретного ключа. Один символ в Visual FoxPro равен 1 байту или 8 битам. Таким образом, для алгоритма шифрования, требующего 128-битного ключа, потребуется секретный ключ из 16 символов (16 x 8 = 128).
0 = AES128 (требуется ключ из 16 символов)
1 = AES192 (требуется ключ из 24 символов)
2 = AES256 (требуется ключ из 32 символов) TEA (требуется ключ из 16 символов)
nEncryptionMode — для каждого из перечисленных выше типов шифрования доступно три различных режима. К ним относятся: электронная кодовая книга (ECB), цепочка блоков шифра (CBC) и блок обратной связи шифра (CFB).
0 = ECB *По умолчанию
1 = CBC
2 = CFB
Возвращаемое значение :
Нет
Примечания :
В настоящее время параметры cFiletoEncrypt и cDestinationFile не могут указывать на одинаковые параметры файла. Это может быть исправлено в будущей версии. Но в целях безопасности эта функция требует, чтобы исходный файл оставался нетронутым.
Функция DECRYPTFILE()
Подпись : DecryptFile(cEncryptedFile, cDestinationFile, cSecretKey[ nDecryptionType[ nDecryptionMode]])
Параметры :
cEncyptedFile – простая текстовая строка, представляющая собой полный путь к файлу, который вы хотите расшифровать, например «C:\EncryptedInfo.doc». расшифрованный файл, который вы хотите создать на диске, например «C:\SensitiveInfo.doc». Если этот файл не существует, он будет создан для вас.
cSecretKey — текстовая строка, которая является тем же ключом, который вы использовали при шифровании данных с помощью функции шифрования, например «My_SeCrEt_KeY».
Обратите внимание, что для некоторых типов дешифрования может потребоваться ключ определенной длины. См. ниже для получения дополнительной информации.
nDecryptionType – в настоящее время доступно 5 типов расшифровки, и они соответствуют тем же типам, которые доступны в Encrypt(). Один символ в Visual FoxPro равен 1 байту или 8 битам. Таким образом, для алгоритма дешифрования, требующего 128-битного ключа, потребуется секретный ключ из 16 символов (16 x 8 = 128).
0 = AES128 (требуется ключ из 16 символов)
1 = AES192 (требуется 24-символьный ключ)
2 = AES256 (требуется 32-символьный ключ) *По умолчанию
4 = Blowfish (требуется 56-символьный ключ)
8 = TEA (требуется 16-символьный ключ)
– nDecryptionMode Для каждого из перечисленных выше типов шифрования доступны три разных режима. К ним относятся: электронная кодовая книга (ECB), цепочка блоков шифра (CBC) и блок обратной связи шифра (CFB).
0 = ECB *По умолчанию
1 = CBC
2 = CFB
Возвращаемое значение :
Нет
Примечания :
Как и в случае с EncryptFile(), параметры cFiletoEncrypt и cDestinationFile не могут указывать на один и тот же файл.
Функциональный хэш ()
Подпись : хэш (cstringtohash [ nhashtype])
Параметры :
Cashshash — функция для генерации.