Кирилл Чернышов
Мыслитель
(6061)
5 часов назад
#!/usr/bin/env bash
# Скрипт для шифрования (-e) и дешифрования (-d) файлов
# Пример использования:
# ./caesar.sh -e file.txt
# ./caesar.sh -d file.txt
# Проверяем количество аргументов
if [ $# -lt 2 ]; then
echo "Использование: $0 [-e|-d] <имя файла>"
exit 1
fi
MODE="$1"
FILE="$2"
# Проверяем, существует ли файл
if [ ! -f "$FILE" ]; then
echo "Файл $FILE не найден!"
exit 1
fi
# Создадим временный файл для преобразованного содержимого
TEMP_FILE="$(mktemp)"
# Зададим соответствие для шифрования и дешифрования сдвигом на 3
ENCRYPT_IN="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
ENCRYPT_OUT="DEFGHIJKLMNOPQRSTUVWXYZABCdefghijklmnopqrstuvwxyzabc"
DECRYPT_IN="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
DECRYPT_OUT="XYZABCDEFGHIJKLMNOPQRSTUVWxyzabcdefghijklmnopqrstuvw"
# Функции для шифрования/дешифрования имени файла
encrypt_name() {
echo "$1" | tr "$ENCRYPT_IN" "$ENCRYPT_OUT"
}
decrypt_name() {
echo "$1" | tr "$DECRYPT_IN" "$DECRYPT_OUT"
}
case "$MODE" in
-e)
# Шифруем содержимое
tr "$ENCRYPT_IN" "$ENCRYPT_OUT" < "$FILE" > "$TEMP_FILE"
# Генерируем новое имя файла (зашифрованное)
NEW_NAME="$(encrypt_name "$FILE")"
# Перемещаем временно зашифрованный файл в файл с новым именем
mv "$TEMP_FILE" "$NEW_NAME"
echo "Файл $FILE зашифрован и переименован в $NEW_NAME"
;;
-d)
# Дешифруем содержимое
tr "$DECRYPT_IN" "$DECRYPT_OUT" < "$FILE" > "$TEMP_FILE"
# Генерируем новое имя файла (расшифрованное)
NEW_NAME="$(decrypt_name "$FILE")"
# Перемещаем временный файл в файл с расшифрованным именем
mv "$TEMP_FILE" "$NEW_NAME"
echo "Файл $FILE расшифрован и переименован в $NEW_NAME"
;;
*)
echo "Неверный режим! Используйте -e (encrypt) или -d (decrypt)."
rm "$TEMP_FILE"
exit 1
;;
esac
Как это работает:
1. Скрипт принимает два аргумента: режим шифрования (-e) или дешифрования (-d) и имя файла. При -e буквы сдвигаются на 3 позиции вперёд, при -d — на 3 назад.
2. Содержимое файла обрабатывается командой tr и временно сохраняется в $TEMP_FILE.
3. Генерируется новое имя (тоже шифруется/дешифруется), и $TEMP_FILE переименовывается.
4. Старый файл остаётся, при желании можно его удалить для полной замены.
5. Пример:
• Шифрование: ./caesar.sh -e file.txt
• Дешифрование: ./caesar.sh -d Dloh.txt
Учтите, что шифрование может изменить и расширение (например, .txt).
Кирилл ЧернышовМыслитель (6061)
4 часа назад
Для того чтобы использовать скрипт, вам нужно выполнить следующие шаги:
1. Сохраните скрипт в файл, например, с именем caesar.sh.
2. Сделайте скрипт исполняемым:
```bash
chmod +x caesar.sh
```
3. Запустите скрипт, передав нужные аргументы:
- Для шифрования (ключ -e), например:
```bash
./caesar.sh -e file.txt
```
- Для дешифрования (ключ -d):
```bash
./caesar.sh -d file.txt
```