#!/usr/bin/env bash #------------------------------------------------------------------------------# # # Dieses Skript erstellt eine verschlüsselte Kopie einer Datei. # # openssl enc -a -salt -iter 1234567 -bf-cbc -e # openssl enc -a -salt -iter 1234567 -bf-cbc -d # #------------------------------------------------------------------------------# #VERSION="v2020100400" # erste Version VERSION="v2020101000" # es kann jetzt auch ein Zielverzeichnis angegeben werden AVERZ="$(dirname ${0})" # Arbeitsverzeichnis, hier liegen diese Dateien #==============================================================================# if [ "x${1}" = x ] ; then ${0} -h exit 10 fi while [ "${#}" -ne "0" ]; do case "${1}" in -w) WIEDERHOLUNGEN="${2}" # es sollten mehr als 1 Mio. mal wiederholt werden shift ;; -m) METHODE="-${2}" # BlowFish als Ersatz für Serpent shift ;; -t) ASCII="-a" # nicht in der platzsparenden Binärform, sondern in Text-Form shift ;; -d) DATEI="${2}" # Dateiname shift ;; -z) ZIEL="${2}" # Zielverzeichnis shift ;; -p) PASSWORT="-pass pass:${2}" # Passwort shift ;; -h) # ausgabe_hilfe echo "HILFE: # die Reihenfolge der Optionen ist unwichtig # Anzahl der Wiederholungen, es sollten mehr als 1 Mio. sein -w 1234567 # Verschlüsselungsmethode, da OpenSSL kein Serpent kann, empfehle ich BlowFish -m bf # nicht in Binärform, sondern in Textform # wenn diese Option nicht angegeben wird, dann wird eine platzsparende Datei mit Binärinhalt erzeugt -t # Datei mit zu verschlüsselndem Inhalt -d geheim.txt # Datei mit zu entschlüsselndem Inhalt -d geheim.txt.ssl # allgemeine Form ${0} -w [Wiederholungen] -m [Verschlüsselungsmethode] [in Binärform oder Textform] -d [verschlüsseln oder entschlüsseln] # verschlüsseln einer Datei, in der platzsparenden Binärform ${0} -w 1234567 -m bf -d geheim.txt # entschlüsseln einer Datei ${0} -w 1234567 -m bf -d geheim.txt.ssl # verschlüsseln einer Datei, in sichtbarer Textform (-t) # das ist geeignet für E-Mails oder zum abschreiben ${0} -w 1234567 -m bf -t -d geheim.txt # entschlüsseln einer Datei, die in Textform (ASCII) vorliegt (-t) ${0} -w 1234567 -m bf -t -d geheim.txt.ssl # das Passwort kann auch (für automatische Abarbeitungen) direkt übergeben werden ${0} -w 1234567 -m bf -d geheim.txt -p 'geheimes Passwort' " exit 20 ;; *) if [ "$(echo "${1}"|egrep '^-')" ] ; then echo "Der Parameter '${1}' wird nicht unterstützt!" export STOP="Ja" fi shift ;; esac done #==============================================================================# ### Kontrolle if [ -e "${DATEI}" ] ; then ls -lha ${DATEI} else echo "Es konnte die Datei '${DATEI}' nicht gefunden werden. Abbruch!" exit 30 fi if [ "x${WIEDERHOLUNGEN}" = x ] ; then WIEDERHOLUNGEN="4567890" fi if [ "x${METHODE}" = x ] ; then METHODE="bf" fi V_NAME="$(dirname "${DATEI}")" if [ "x${ZIEL}" = x ] ; then ABS="$(echo "${DATEI}" | egrep '^[/]')" if [ "x${ABS}" = x ] ; then ZIEL="." fi fi #==============================================================================# ### Programm PROGRAMM="$(which openssl)" if [ "x${PROGRAMM}" = "x" ] ; then echo "Es konnte das Programm 'openssl' nicht gefunden werden. Abbruch!" exit 40 fi #==============================================================================# ENDUNG="$(echo "${DATEI}" | rev | awk '{sub("[.]"," "); print tolower($1)}' | rev)" #echo "ENDUNG='${ENDUNG}'" if [ "${ENDUNG}" = "ssl" ] ; then D_NAME="$(basename "${DATEI}" | rev | awk '{sub("[.]"," "); print $2}' | rev)" echo "#=> ${ZIEL}/${V_NAME}/${D_NAME}" if [ -e "${ZIEL}/${V_NAME}/${D_NAME}" ] ; then echo "Die Datei mit dem Namen '${D_NAME}' existiert schon." else mkdir -p "${ZIEL}/${V_NAME}/" touch "${ZIEL}/${V_NAME}/${D_NAME}" chmod 0600 "${ZIEL}/${V_NAME}/${D_NAME}" cat ${DATEI} | openssl enc -salt -iter ${WIEDERHOLUNGEN} ${METHODE} ${ASCII} ${PASSWORT} -d > "${ZIEL}/${V_NAME}/${D_NAME}" ls -lha "${ZIEL}/${V_NAME}/${D_NAME}" fi else echo "#=> ${ZIEL}/${V_NAME}/${DATEI}".ssl if [ -e "${ZIEL}/${V_NAME}/${DATEI}.ssl" ] ; then echo "Die Datei mit dem Namen '${DATEI}.ssl' existiert schon." else mkdir -p "${ZIEL}/${V_NAME}/" touch "${ZIEL}/${V_NAME}/${DATEI}".ssl chmod 0600 "${ZIEL}/${V_NAME}/${DATEI}".ssl cat ${DATEI} | openssl enc -salt -iter ${WIEDERHOLUNGEN} ${METHODE} ${ASCII} ${PASSWORT} -e > "${ZIEL}/${V_NAME}/${DATEI}".ssl ls -lha "${ZIEL}/${V_NAME}/${DATEI}".ssl fi fi