HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Python
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 20.08.2021, 18:42
pomidorq
Участник форума
Регистрация: 17.04.2020
Сообщений: 184
С нами: 3197792

Репутация: 83
По умолчанию

Идею взял отсюда - PythonToday.

Одел в более-менее приятный Tkinter интерфейс.

Шифрует файлы любого расширения.

При вводе ключа, который кстати необходимо куда-нибудь записать/запомнить, создаётся папка main в папке с исполняемым файлом. В эту папку кидаем файлы которые хотим зашифровать. (Для особо ленивых есть функция open, чтобы открыть эту папку.) В программе жмём encrypt и наблюдаем. Все файлы с расширением ... .crp - зашифрованы, их сможете открыть только вы, т.к только вы знаете код, который ввели вначале.

Ошибок у программы никаких быть не может (Windows 10), код обкатан на 3-ёх компах.

Зависимости:

pyAesCrypt
Работа только от имени администратора.

Любая попытка контакта с создаваемыми скриптом файлами приведёт к удалению всех файлов в папке main, если работать так, как показано на видео - ничего не удалиться.

1) Не пытайтесь менять расширения закриптованных файлов, в противном случае придётся вернуть старое чтобы снова открыть файл после Decrypt.

2) Не пытайтесь удалить папку Burn The Dark в Program files, или же удалять файл cfg.crp в этой папке. Это приведёт к удалению всех файлов связанных с программой, и всех файлов в папке main.

3) Для компиляции используйте pyarmor либо pyinstaller. (желательно pyarmor).

4) Не нужно пихать в программу 50 ГБ игры/видео, а потом писать сюда что очень долго.



Работоспособность:

Цитата:
Сообщение от Спойлер  


main.py:





Код:
import
tkinter
import
time
import
json
import
datetime
import
os
import
pyAesCrypt
import
shutil
import
subprocess
import
sys
import
config
from
tkinter
import
Button
,
Entry
,
messagebox
,
Label
,
PhotoImage
from
crypt
import
*
from
other_funcs
import
*
class
Window
(
)
:
"""Main window"""
def
__init__
(
self
,
title_
,
icon
,
width
=
500
,
height
=
275
)
:
self
.
root
=
tkinter
.
Tk
(
)
self
.
root
.
geometry
(
f'{width}x{height}'
)
self
.
root
.
resizable
(
False
,
False
)
self
.
root
.
title
(
title_
)
self
.
root
[
'bg'
]
=
config
.
backgrond_color
""" Empty Label """
self
.
empty_label
=
Label
(
self
.
root
,
background
=
config
.
backgrond_color
)
self
.
empty_label
.
pack
(
**
config
.
upper_empty_label_padding
)
try
:
""" Icon """
self
.
root
.
iconbitmap
(
icon
)
""" Background image """
self
.
image
=
PhotoImage
(
file
=
config
.
background_path
)
self
.
label_image
=
Label
(
self
.
root
,
borderwidth
=
0
)
self
.
label_image
.
image
=
self
.
image
            self
.
label_image
[
'image'
]
=
self
.
label_image
.
image
            self
.
label_image
.
place
(
x
=
0
,
y
=
0
)
except
Exception
as
error
:
crashlog
(
error
)
def
start
(
self
)
:
self
.
root
.
mainloop
(
)
def
register_button
(
self
)
:
password
=
self
.
entry_password
.
get
(
)
if
not
password
:
messagebox
.
showwarning
(
'Warning.'
,
'The key field is empty.'
)
else
:
""" Make first-registration folder """
mkdir
(
)
mkcfg
(
)
encryption
(
config
.
cfg_path
,
password
)
messagebox
.
showinfo
(
'Success'
,
'Restart a program.'
)
sys
.
exit
(
)
def
after_success_login
(
self
)
:
""" Remove login startup """
self
.
label_nothing
.
destroy
(
)
self
.
label_password
.
destroy
(
)
self
.
entry_password
.
destroy
(
)
self
.
button_login
.
destroy
(
)
""" Call main menu function """
window
.
main_menu
(
)
def
check_login
(
self
)
:
global
password
        password
=
self
.
entry_password
.
get
(
)
try
:
decryption
(
config
.
cfg_path
+
'.crp'
,
password
)
encryption
(
config
.
cfg_path
,
password
)
window
.
after_success_login
(
)
except
Exception
as
error
:
messagebox
.
showwarning
(
'Error'
,
'Wrong password.'
)
def
login
(
self
)
:
self
.
label_nothing
=
Label
(
self
.
root
,
text
=
''
,
background
=
config
.
backgrond_color
,
)
""" Label """
self
.
label_password
=
Label
(
self
.
root
,
text
=
'Key'
,
background
=
config
.
backgrond_color
,
foreground
=
config
.
labels_color
,
font
=
config
.
labels_font
,
)
""" Entry """
self
.
entry_password
=
Entry
(
self
.
root
,
font
=
config
.
entries_font
,
relief
=
'flat'
,
foreground
=
config
.
labels_color
,
background
=
config
.
entry_color
,
show
=
config
.
symbol_password
)
""" Button """
self
.
button_login
=
Button
(
self
.
root
,
text
=
'Login'
,
font
=
config
.
buttons_font
,
relief
=
'flat'
,
background
=
config
.
buttons_color
,
activebackground
=
config
.
buttons_color
,
command
=
lambda
:
window
.
check_login
(
)
)
""" Packing """
self
.
label_nothing
.
pack
(
**
config
.
labels_padding
)
self
.
label_password
.
pack
(
)
self
.
entry_password
.
pack
(
)
self
.
button_login
.
pack
(
**
config
.
buttons_padding
)
def
registration
(
self
)
:
""" Upper label """
self
.
label_registration
=
Label
(
self
.
root
,
text
=
'Welcome!\nEnter a new key to register'
,
font
=
config
.
welcome_font
,
background
=
config
.
backgrond_color
,
foreground
=
config
.
welcome_labels_color
)
""" Register label """
self
.
label_password
=
Label
(
self
.
root
,
text
=
'Key'
,
background
=
config
.
backgrond_color
,
foreground
=
config
.
labels_color
,
font
=
config
.
labels_font
,
)
""" Register entry """
self
.
entry_password
=
Entry
(
self
.
root
,
font
=
config
.
entries_font
,
relief
=
'flat'
,
foreground
=
config
.
labels_color
,
background
=
config
.
entry_color
,
show
=
config
.
symbol_password
)
""" Register button """
self
.
button_register
=
Button
(
self
.
root
,
text
=
'Register'
,
font
=
config
.
buttons_font
,
relief
=
'flat'
,
background
=
config
.
buttons_color
,
activebackground
=
config
.
buttons_color
,
command
=
lambda
:
window
.
register_button
(
)
)
""" Packing """
self
.
label_registration
.
pack
(
**
config
.
labels_padding
)
self
.
label_password
.
pack
(
)
self
.
entry_password
.
pack
(
)
self
.
button_register
.
pack
(
**
config
.
buttons_padding
)
def
main_menu
(
self
)
:
""" After success login you get it """
self
.
button_open
=
Button
(
self
.
root
,
text
=
'Open'
,
font
=
config
.
buttons_font
,
relief
=
'flat'
,
background
=
config
.
buttons_color
,
activebackground
=
config
.
buttons_color
,
width
=
config
.
width_buttons
,
command
=
open_directory
)
self
.
button_destroy
=
Button
(
self
.
root
,
text
=
'Destroy'
,
font
=
config
.
buttons_font
,
relief
=
'flat'
,
background
=
config
.
buttons_color
,
activebackground
=
config
.
buttons_color
,
width
=
config
.
width_buttons
,
command
=
destroy
)
self
.
button_encrypt
=
Button
(
self
.
root
,
text
=
'Encrypt'
,
font
=
config
.
buttons_font
,
relief
=
'flat'
,
background
=
config
.
buttons_color
,
activebackground
=
config
.
buttons_color
,
width
=
config
.
width_buttons
,
command
=
lambda
:
walking_by_dirs_encryption
(
config
.
main_folder_path
,
password
)
)
self
.
button_decrypt
=
Button
(
self
.
root
,
text
=
'Decrypt'
,
font
=
config
.
buttons_font
,
relief
=
'flat'
,
background
=
config
.
buttons_color
,
activebackground
=
config
.
buttons_color
,
width
=
config
.
width_buttons
,
command
=
lambda
:
walking_by_dirs_decryption
(
config
.
main_folder_path
,
password
)
)
""" Packing """
self
.
button_open
.
pack
(
**
config
.
main_menu_padding
)
self
.
button_destroy
.
pack
(
**
config
.
main_menu_padding
)
self
.
button_encrypt
.
pack
(
**
config
.
main_menu_padding
)
self
.
button_decrypt
.
pack
(
**
config
.
main_menu_padding
)
if
__name__
==
'__main__'
:
window
=
Window
(
title_
=
config
.
title_
,
icon
=
config
.
icon_path
)
start
=
check_registration
(
)
if
start
==
1
:
window
.
login
(
)
window
.
start
(
)
else
:
window
.
registration
(
)
window
.
start
(
)


other_funcs.py:





Код:
import
datetime
,
os
,
shutil
,
sys
,
config
from
tkinter
import
messagebox
import
subprocess
def
now_time
(
)
:
now
=
datetime
.
datetime
.
now
(
)
time
=
now
.
strftime
(
'%Y-%m-%d %H:%M:%S'
)
return
time
def
crashlog
(
error
)
:
time
=
now_time
(
)
time
=
f'[{time}]'
error
=
f'\n{str(error)}\n\n'
with
open
(
'crashlog.txt'
,
'a'
)
as
file
:
file
.
write
(
time
)
file
.
write
(
error
)
def
mkdir
(
)
:
os
.
mkdir
(
config
.
main_folder_path
)
os
.
mkdir
(
config
.
cfg_folder_path
)
subprocess
.
call
(
[
'attrib'
,
'+h'
,
config
.
cfg_folder_path
]
)
### Make folder hide ###
def
mkcfg
(
)
:
with
open
(
config
.
cfg_path
,
'w'
)
as
file
:
pass
def
check_registration
(
)
:
if
os
.
path
.
exists
(
config
.
cfg_path
+
'.crp'
)
:
if
not
os
.
path
.
exists
(
config
.
main_folder_path
)
:
os
.
mkdir
(
config
.
main_folder_path
)
return
1
else
:
if
not
os
.
path
.
exists
(
config
.
cfg_folder_path
)
:
try
:
shutil
.
rmtree
(
config
.
main_folder_path
)
except
Exception
as
error
:
crashlog
(
error
)
if
not
os
.
path
.
exists
(
config
.
cfg_path
+
'.crp'
)
:
try
:
shutil
.
rmtree
(
config
.
cfg_folder_path
)
shutil
.
rmtree
(
config
.
main_folder_path
)
except
Exception
as
error
:
crashlog
(
error
)
return
-
1
def
open_directory
(
)
:
os
.
startfile
(
config
.
main_folder_path
)
def
destroy
(
)
:
ask
=
messagebox
.
askokcancel
(
'Destroy'
,
'Are you sure that you want to permanently delete all files?'
)
if
ask
==
True
:
try
:
shutil
.
rmtree
(
config
.
cfg_folder_path
)
except
:
pass
try
:
shutil
.
rmtree
(
config
.
main_folder_path
)
except
:
pass
try
:
os
.
remove
(
'crashlog.txt'
)
except
:
pass
sys
.
exit
(
)


config.py:





Код:
""" Tkinter settings """
icon_path
=
'images/icon.ico'
background_path
=
'images/background.png'
cfg_path
=
'C:/Program Files/Burn The Dark/cfg'
cfg_folder_path
=
'C:/Program Files/Burn The Dark'
main_folder_path
=
'main'
title_
=
'BURN THE DARK'
""" Colors """
backgrond_color
=
'#141414'
entry_color
=
'#363636'
welcome_labels_color
=
'#607D5E'
labels_color
=
'#A0FF99'
buttons_color
=
'#7A7A7A'
""" Fonts """
welcome_font
=
(
'MADE Likes Slab'
,
15
)
buttons_font
=
(
'Bahnschrift'
,
12
)
labels_font
=
(
'Palatino Linotype'
,
12
)
entries_font
=
(
"Calibri 10"
)
"""Paddigns"""
upper_empty_label_padding
=
{
'padx'
:
0
,
'pady'
:
10
}
labels_padding
=
{
'padx'
:
0
,
'pady'
:
12
}
buttons_padding
=
{
'padx'
:
0
,
'pady'
:
5
}
main_menu_padding
=
{
'padx'
:
0
,
'pady'
:
8
}
""" Encryption/Decryption """
buffer_size
=
512
*
1024
""" Sybmols """
symbol_password
=
'▬'
""" Sizes """
width_buttons
=
10


crypt.py:





Код:
import
os
,
pyAesCrypt
,
config
def
encryption
(
file_path
,
password
)
:
buffer_
=
config
.
buffer_size

    pyAesCrypt
.
encryptFile
(
str
(
file_path
)
,
str
(
file_path
)
+
".crp"
,
password
,
buffer_
)
os
.
remove
(
file_path
)
def
decryption
(
file_path
,
password
)
:
buffer_
=
config
.
buffer_size

    pyAesCrypt
.
decryptFile
(
str
(
file_path
)
,
str
(
os
.
path
.
splitext
(
file_path
)
[
0
]
)
,
password
,
buffer_
)
os
.
remove
(
file_path
)
def
walking_by_dirs_decryption
(
dir
,
password
)
:
for
name
in
os
.
listdir
(
dir
)
:
path
=
os
.
path
.
join
(
dir
,
name
)
if
os
.
path
.
isfile
(
path
)
:
try
:
decryption
(
path
,
password
)
except
:
pass
else
:
walking_by_dirs_decryption
(
path
,
password
)
def
walking_by_dirs_encryption
(
dir
,
password
)
:
for
name
in
os
.
listdir
(
dir
)
:
path
=
os
.
path
.
join
(
dir
,
name
)
if
os
.
path
.
isfile
(
path
)
:
try
:
encryption
(
path
,
password
)
except
:
pass
else
:
walking_by_dirs_encryption
(
path
,
password
)


 
Ответить с цитированием

  #2  
Старый 20.08.2021, 19:16
SpeN
Участник форума
Регистрация: 07.08.2018
Сообщений: 141
С нами: 4087921

Репутация: 83
По умолчанию

1629472573377.pngSpeN · 20 Авг 2021 в 18:16' data-fancybox="lb-post-824779" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/111043/" style="cursor: pointer;" title="1629472573377.png">
 
Ответить с цитированием

  #3  
Старый 20.08.2021, 19:18
pomidorq
Участник форума
Регистрация: 17.04.2020
Сообщений: 184
С нами: 3197792

Репутация: 83
По умолчанию

Цитата:
Сообщение от SH4DDENNNNNN  
+
 
Ответить с цитированием

  #4  
Старый 20.08.2021, 19:24
Distarbed
Познающий
Регистрация: 12.05.2020
Сообщений: 55
С нами: 3161895

Репутация: 13
По умолчанию

Цитата:
Сообщение от devilgoat  

+
Особо не поменялось
 
Ответить с цитированием

  #5  
Старый 20.08.2021, 19:35
Distarbed
Познающий
Регистрация: 12.05.2020
Сообщений: 55
С нами: 3161895

Репутация: 13
По умолчанию

Цитата:
Сообщение от devilgoat  

У меня вот так. Если у тебя так же - менять ничего не буду. Else жду скрин.
1629473686671.pngDistarbed · 20 Авг 2021 в 18:35' data-fancybox="lb-post-824800" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/111047/" style="cursor: pointer;" title="1629473686671.png">
 
Ответить с цитированием

  #6  
Старый 20.08.2021, 19:36
pomidorq
Участник форума
Регистрация: 17.04.2020
Сообщений: 184
С нами: 3197792

Репутация: 83
По умолчанию

Цитата:
Сообщение от Distarbed  
Сейчас решу, добавлю спойлер для тёмной темы.
 
Ответить с цитированием

  #7  
Старый 20.08.2021, 19:47
chapo
Флудер
Регистрация: 10.10.2016
Сообщений: 9,228
С нами: 5046982

Репутация: 183


По умолчанию

Цитата:
Сообщение от devilgoat  

Сейчас решу, добавлю спойлер для тёмной темы.
 
Ответить с цитированием

  #8  
Старый 20.08.2021, 19:58
kizn
Флудер
Регистрация: 23.09.2017
Сообщений: 2,409
С нами: 4546268

Репутация: 183


По умолчанию

взять дефолтный цвет, который идеально отображается на светлой и на темной теме? нееее

создать две версии темы - дааааа
 
Ответить с цитированием

  #9  
Старый 07.12.2021, 13:49
Majunti
Постоянный
Регистрация: 05.10.2020
Сообщений: 509
С нами: 2950908

Репутация: 48


По умолчанию

Цитата:
Сообщение от k1zn  

взять дефолтный цвет, который идеально отображается на светлой и на темной теме? нееее
создать две версии темы - дааааа
Предлагаю таких казнить прилюдно.
 
Ответить с цитированием

  #10  
Старый 18.03.2024, 04:01
Bunker22
Новичок
Регистрация: 18.03.2024
Сообщений: 1
С нами: 1137043

Репутация: 1
По умолчанию

При создании ключа скрипт ломается.

Помогите пожалуйста.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.