Есть шифратор файлов, в моем случае это шифратор видео.
Add(MainForm,8308775,385,133)
{
Height=214
Caption="Encrypt - threads demo"
BorderStyle=1
Position=1
}
Add(Edit,4011429,476,133)
{
Left=60
Top=5
Width=320
Text="123456"
}
Add(Label,15199179,476,84)
{
Left=10
Top=10
Width=48
Height=17
Caption="Пароль:"
}
Add(LineBreakEx,3037814,476,175)
{
Caption="pass"
Type=3
link(_Data,4011429:Text,[])
}
Add(Label,5968536,742,84)
{
Left=10
Top=35
Width=87
Height=17
Caption="Исходный файл:"
}
Add(Label,3369797,938,84)
{
Left=10
Top=75
Width=121
Height=17
Caption="Зашифрованный файл:"
}
Add(Button,5726157,371,826)
{
Left=10
Top=120
Width=95
Height=25
Caption="Зашифровать"
link(onClick,1595303:doStart,[])
}
Add(Label,14925684,1085,1043)
{
Left=80
Top=155
Width=10
Height=17
Caption="0"
link(Text,3557433:Value,[])
}
Add(LineBreakEx,9758177,721,553)
{
Caption="fsrc"
Type=2
}
Add(LineBreakEx,5516860,728,574)
{
Caption="fencr"
Type=2
}
Add(LineBreakEx,10668305,714,532)
{
Caption="pass"
Type=2
}
Add(EnCrypt,13958992,658,763)
{
Mode=4
InitVector="AAA"
Point(onError)
Point(doAbort)
Point(onProgress)
link(onEncrypt,14941371:doWork2,[(724,769)(724,832)])
link(Key,10668305:getVar,[(671,655)(720,655)])
link(SrcFileName,9758177:getVar,[(678,665)(727,665)])
link(DstFileName,5516860:getVar,[(685,675)(734,675)])
link(onError,11356253:doEvent1,[(761,776)(761,741)])
link(onProgress,14941371:doWork3,[(725,783)(725,841)(760,841)])
}
Add(Message,8933103,840,749)
{
Caption="Ошбика"
Icon=1
}
Add(Button,7998221,567,854)
{
Left=235
Top=150
Width=105
Caption="Прервать"
link(onClick,4116247:doEvent1,[])
}
Add(HubEx,14941371,756,826)
{
link(onEvent,15768141:doSafeMode,[])
}
Add(Thread,1595303,441,826)
{
FastStop=0
link(onExec,9160381:doEvent1,[])
}
Add(Edit,824952,742,147)
{
Left=10
Top=50
Width=330
Text="bigfile.avi"
}
Add(Button,15277380,644,147)
{
Left=345
Top=50
Width=40
Caption="..."
link(onClick,1218516:doExecute,[])
}
Add(ODialog,1218516,700,147)
{
Filter="Все файлы (*.*)|*.*"
Title="Выбор файла"
FileName=""
Point(FileName)
link(onExecute,824952:doText,[])
link(FileName,12181497:Var3,[(706,132)(782,132)(782,194)])
}
Add(Edit,12991863,938,147)
{
Left=10
Top=95
Width=330
Text="bigfile.avi.encrypted"
}
Add(Button,4070287,840,147)
{
Left=345
Top=95
Width=40
Caption="..."
link(onClick,2080759:doExecute,[])
}
Add(ODialog,2080759,896,147)
{
Filter="Все файлы (*.*)|*.*"
Title="Выбор файла"
FileName=""
Point(FileName)
link(onExecute,12991863:doText,[])
link(FileName,10205981:Var3,[(902,128)(983,128)(983,187)])
}
Add(GetDataEx,10205981,938,182)
{
link(Data,12991863:Text,[])
}
Add(GetDataEx,12181497,742,189)
{
link(Data,824952:Text,[])
}
Add(LineBreakEx,9353820,742,210)
{
Caption="fsrc"
Type=3
link(_Data,12181497:Var2,[])
}
Add(LineBreakEx,1787963,938,203)
{
Caption="fencr"
Type=3
link(_Data,10205981:Var2,[])
}
Add(Label,6318026,385,217)
{
Left=10
Top=155
Width=68
Height=17
Caption="Обработано:"
}
Add(InfoTip,8165527,609,427)
{
Info=#207:Более правильно сначала через Synchronize (либо сразу по клику на кнопку) получить требуемые данные от визуальных компонентов в переменные, затем уже без Synchronize в параллельном потоке запустить обработку|
Width=253
Height=172
}
Add(LineBreakEx,6229770,588,714)
{
Caption="start"
}
Add(LineBreakEx,5156901,868,1001)
{
Caption="start"
Type=1
link(OnEvent,15007035:doTimer,[(920,1007)(920,1049)])
}
Add(InfoTip,7225840,483,301)
{
Info=#10:Паттерн №2|124:Уменьшен EnCrypt.BufferSize для ускорения выдачи событий и показано способ реализации оповещения пользователя в таком случае|
Font=[MS Sans Serif,8,1,0,1]
Width=442
Height=60
}
Add(Memory,3557433,1085,826)
{
}
Add(SafeMode,15768141,1015,826)
{
Name="CritSection1"
link(onSafeMode,3557433:doValue,[])
AddHint(-20,36,72,13,Name)
}
Add(SafeMode,15450595,1022,1043)
{
Name="CritSection1"
link(onSafeMode,14925684:doText,[])
AddHint(-23,36,72,13,Name)
}
Add(InfoTip,16259543,980,777)
{
Info=#74:Данные, к которым обращаются несколько потоков, должны защищаться SafeMode|0:|0:|0:|0:|0:|0:|43:Здесь не следует заграгивать главный поток!|
Width=190
Height=151
}
Add(LineBreakEx,5684143,553,980)
{
Caption="stop"
}
Add(LineBreakEx,2541384,868,1064)
{
Caption="stop"
Type=1
link(OnEvent,15007035:doStop,[(922,1070)(922,1056)])
}
Add(Timer,15007035,931,1043)
{
Interval=100
Enable=1
link(onTimer,15450595:doSafeMode,[])
AddHint(-4,41,33,13,Interval)
}
Add(Hub,9160381,497,826)
{
OutCount=3
link(onEvent1,7172380:doSynchronize,[(525,832)(525,720)])
link(onEvent2,13958992:doEncryptFile,[(609,839)(609,776)])
link(onEvent3,5684143:doWork,[(524,846)(524,986)])
}
Add(Synchronize,7172380,539,714)
{
link(onSync,6229770:doWork,[])
}
Add(InfoTip,15317784,462,679)
{
Info=#64:Здесь Synchronize требуется для включения таймера из пар. потока|
Width=190
Height=81
}
Add(LineBreakEx,12946360,840,721)
{
Caption="stop"
}
Add(Hub,11356253,784,735)
{
link(onEvent1,12946360:doWork,[(812,741)(812,727)])
link(onEvent2,8933103:doMessage,[(813,748)(813,755)])
}
Add(LineBreakEx,13326123,637,840)
{
Caption="stop"
}
Add(Hub,4116247,609,854)
{
link(onEvent1,13326123:doWork,[(630,860)(630,846)])
link(onEvent2,13958992:doAbort,[(641,867)(641,790)])
}
Add(InfoTip,10198054,847,1001)
{
Info=#28:Исполняется в главном потоке|
Width=281
Height=123
}
Add(InfoTip,2406579,539,903)
{
Info=#228:Поскольку таймер показывает пользователю прогресс с некоторым интервалом, то последнее значение (100%) пользователь может не увидеть - по завершению работы можно принудительно через Synchronize ещё раз вывести последнее значение|
Width=274
Height=102
}
Add(ZLIB,43492,924,889)
{
}
Add(StreamPack,15537523,875,889)
{
DataCount=#3:bmp|
link(onPack,43492:doCompress,[])
}
Он создает зашифрованный видео файл и сохраняет его рядом с оригиналом.
А так же есть Дешифратор, который восстанавливает видео из зашифрованного видео, в первоначальный видео файл. В общем после дешифровки происходит сохранение исходного видео файла.
Add(MainForm,8308775,385,133)
{
Width=425
Height=225
Caption="Encrypt - threads demo"
BorderStyle=1
Position=1
Point(Handle)
}
Add(Edit,4011429,476,133)
{
Left=60
Top=5
Width=320
Text="123456"
}
Add(Label,15199179,476,84)
{
Left=10
Top=10
Width=48
Height=17
Caption="Пароль:"
}
Add(LineBreakEx,3037814,476,189)
{
Caption="pass"
Type=3
link(_Data,4011429:Text,[])
}
Add(Label,5968536,742,84)
{
Left=10
Top=35
Width=87
Height=17
Caption="Исходный файл:"
}
Add(Label,3369797,938,84)
{
Left=10
Top=75
Width=127
Height=17
Caption="Расшифрованный файл:"
}
Add(Button,5726157,371,826)
{
Left=10
Top=120
Width=95
Height=25
Caption="Расшифровать"
link(onClick,1595303:doStart,[])
}
Add(Label,14925684,1085,1043)
{
Left=80
Top=155
Width=10
Height=17
Caption="0"
link(Text,3557433:Value,[])
}
Add(LineBreakEx,9758177,721,553)
{
Caption="fsrc"
Type=2
}
Add(LineBreakEx,5516860,728,574)
{
Caption="fencr"
Type=2
}
Add(LineBreakEx,10668305,714,532)
{
Caption="pass"
Type=2
}
Add(Button,7998221,546,854)
{
Left=235
Top=150
Width=105
Caption="Прервать"
link(onClick,4116247:doEvent1,[])
}
Add(HubEx,14941371,756,826)
{
link(onEvent,11258259:doEvent1,[])
}
Add(Thread,1595303,441,826)
{
Delay=100
FastStop=0
link(onExec,9160381:doEvent1,[])
}
Add(Edit,824952,742,147)
{
Left=10
Top=50
Width=330
Text=""
}
Add(Button,15277380,644,147)
{
Left=345
Top=50
Width=40
Caption="..."
link(onClick,1218516:doExecute,[])
}
Add(ODialog,1218516,700,147)
{
Filter="*.encrypted"
Title="Выбор файла"
FileName=""
Point(FileName)
link(onExecute,824952:doText,[])
link(FileName,12181497:Var3,[(706,132)(782,132)(782,194)])
}
Add(Edit,12991863,938,147)
{
Left=10
Top=95
Width=375
Text="youfile.wmv"
}
Add(Button,4070287,840,147)
{
Left=345
Top=95
Width=40
Visible=1
Caption="..."
link(onClick,2080759:doExecute,[])
}
Add(ODialog,2080759,896,147)
{
Filter="Все файлы (*.*)|*.*"
Title="Выбор файла"
FileName="youfile.wmv"
NoChangeDir=1
FileMustExists=0
Point(FileName)
link(onExecute,12991863:doText,[])
link(FileName,10205981:Var3,[(902,128)(983,128)(983,187)])
}
Add(GetDataEx,10205981,938,182)
{
link(Data,12991863:Text,[])
}
Add(GetDataEx,12181497,742,189)
{
link(Data,824952:Text,[])
}
Add(LineBreakEx,9353820,742,210)
{
Caption="fsrc"
Type=3
link(_Data,12181497:Var2,[])
}
Add(LineBreakEx,1787963,938,224)
{
Caption="fencr"
Type=3
link(_Data,10205981:Var2,[])
}
Add(Label,6318026,385,217)
{
Left=10
Top=155
Width=68
Height=17
Caption="Обработано:"
}
Add(InfoTip,8165527,609,427)
{
Info=#207:Более правильно сначала через Synchronize (либо сразу по клику на кнопку) получить требуемые данные от визуальных компонентов в переменные, затем уже без Synchronize в параллельном потоке запустить обработку|
Width=253
Height=172
}
Add(LineBreakEx,6229770,588,714)
{
Caption="start"
}
Add(LineBreakEx,5156901,868,1015)
{
Caption="start"
Type=1
link(OnEvent,15007035:doTimer,[(920,1021)(920,1049)])
}
Add(InfoTip,7225840,483,301)
{
Info=#10:Паттерн №2|124:Уменьшен EnCrypt.BufferSize для ускорения выдачи событий и показано способ реализации оповещения пользователя в таком случае|
Font=[MS Sans Serif,8,1,0,1]
Width=442
Height=60
}
Add(Memory,3557433,1085,826)
{
}
Add(SafeMode,15768141,938,826)
{
Name="CritSection1"
link(onSafeMode,3557433:doValue,[])
AddHint(-20,36,72,13,Name)
}
Add(SafeMode,15450595,1015,1043)
{
Name="CritSection1"
link(onSafeMode,14925684:doText,[])
AddHint(-23,36,72,13,Name)
}
Add(InfoTip,16259543,980,777)
{
Info=#74:Данные, к которым обращаются несколько потоков, должны защищаться SafeMode|0:|0:|0:|0:|0:|0:|43:Здесь не следует заграгивать главный поток!|
Width=190
Height=151
}
Add(LineBreakEx,5684143,553,973)
{
Caption="stop"
}
Add(LineBreakEx,2541384,868,1064)
{
Caption="stop"
Type=1
link(OnEvent,15007035:doStop,[(920,1070)(920,1056)])
}
Add(Timer,15007035,931,1043)
{
Interval=500
Enable=1
link(onTimer,15450595:doSafeMode,[])
AddHint(-4,41,33,13,Interval)
}
Add(Hub,9160381,497,826)
{
OutCount=3
link(onEvent1,7172380:doSynchronize,[(518,832)(518,720)])
link(onEvent2,7816974:doDecryptFile,[(605,839)(605,846)])
link(onEvent3,5684143:doWork,[(524,846)(524,979)])
}
Add(Synchronize,7172380,532,714)
{
link(onSync,6229770:doWork,[])
}
Add(InfoTip,15317784,462,679)
{
Info=#64:Здесь Synchronize требуется для включения таймера из пар. потока|
Width=190
Height=81
}
Add(LineBreakEx,12946360,826,861)
{
Caption="stop"
}
Add(Hub,11356253,784,868)
{
OutCount=3
link(onEvent1,12946360:doWork,[(812,874)(812,867)])
link(onEvent2,3959344:doWork,[(816,881)(816,895)])
link(onEvent3,11258259:doEvent2,[(830,888)(830,839)])
}
Add(LineBreakEx,13326123,637,819)
{
Caption="stop"
}
Add(Hub,4116247,609,854)
{
link(onEvent1,13326123:doWork,[(630,860)(630,825)])
link(onEvent2,7816974:doAbort,[(661,867)(661,860)])
}
Add(InfoTip,10198054,847,1001)
{
Info=#28:Исполняется в главном потоке|
Width=281
Height=123
}
Add(InfoTip,2406579,539,903)
{
Info=#228:Поскольку таймер показывает пользователю прогресс с некоторым интервалом, то последнее значение (100%) пользователь может не увидеть - по завершению работы можно принудительно через Synchronize ещё раз вывести последнее значение|
Width=274
Height=102
}
Add(DeCrypt,7816974,700,833)
{
Mode=4
InitVector="AAA"
Point(doAbort)
Point(onProgress)
Point(onError)
Point(DstStream)
link(onDecrypt,14941371:doWork2,[(748,839)(748,832)])
link(Key,10668305:getVar,[(713,686)(720,686)])
link(SrcFileName,9758177:getVar,[(720,696)(727,696)])
link(DstFileName,5516860:getVar,[(727,707)(734,707)])
link(onProgress,11356253:doEvent1,[(765,846)(765,874)])
link(onError,14941371:doWork3,[(828,853)(828,841)(760,841)])
}
Add(Hub,11258259,861,826)
{
InCount=2
OutCount=1
link(onEvent1,15768141:doSafeMode,[])
}
Add(LineBreakEx,3959344,826,889)
{
Caption="start"
}
Вот собственно вопрос. КАК!!! просмотреть зашифрованное видео не расшифровывая и не сохраняя его изначально в файл, а напрямую из под дешифратора? Чтоб восстановленный файл нигде не создавался.
--- Добавлено в 2020-04-24 06:39:37
Какой то глюк произошел. Создался дубль темы.
Редактировалось 1 раз(а), последний 2020-04-24 06:39:37