- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
#!/bin/sh
# Простое, но устойчивое шифрование файлов при помощи
# комманды openssl, входящей в любую поставку FreeBSD
# Команда openssl
openssl_cmd="openssl"
# Метод шифрования
enc_method="-aes-256-cbc"
# Вывод справки
use() {
echo "Use: `basename $0` <-e|-d> filename"
exit 0
}
# Не переданы параметры - выводим справку
[ $2 ] || use
param="$1" ; file="$2"
# Файл существует? Нет - ошибка
[ -r $file ] || \
{ echo File ${file} does not exist or is not readable. Exit. ; exit 1 ; }
# Запрос пароля для шифрования
enter_password() {
# Отключаем отображение вводимых символов и запрашиваем пароль
stty -echo ; printf "Enter password: " ; read password ; echo
# Просим пароль ещё раз, для проверки. Включаем отображение вводимых символов
printf "Verify password: " ; read verify_password ; stty echo ; echo
# Сравниваем пароли. Различаются - ошибка
[ $password != $verify_password ] && { echo "Incorrect password. Exit." ; exit 1 ; }
}
# Запрос пароля для расшифровки
enter_password_dec() {
stty -echo ; printf "Enter password: " ; read password ; stty echo ; echo
}
case $param in
[-][Ee])
enter_password
file_out="${file}.encoded"
[ -e $file_out ] && { suffix=".$(head /dev/urandom | tr -dc 'a-zA-Z' | cut -c 1-6)" ; \
echo File ${file_out} exists. Saved as ${file_out}${suffix} ; }
${openssl_cmd} enc -e ${enc_method} -k ${password} -in ${file} -out ${file_out}${suffix}
;;
[-][Dd])
enter_password_dec
file_ext="`echo ${file} | rev | cut -d. -f1`"
if [ "$file_ext" = "dedocne" ] ; then
file_out="`echo ${file} | rev | cut -d. -f2-1024 | rev`"
else
file_out="$file"
fi
[ -e $file_out ] && { suffix=".$(head /dev/urandom | tr -dc 'a-zA-Z' | cut -c 1-6)" ; \
echo File ${file_out} exists. Saved as ${file_out}${suffix} ; }
${openssl_cmd} enc -d ${enc_method} -k ${password} -in ${file} -out ${file_out}${suffix}
;;
*)
use
;;
esac
Вот такая фигня, малята. Всё в комментариях к коду.