Usando Automator o AppleScript para cifrar / descifrar con OpenSSL

3

Me gustaría saber cómo usar Automator o AppleScript para crear un droplet que comprima / descomprima (tar.gz) y encripte / descifre con archivos OpenSSL y / o directorios incluidos. El flujo de trabajo sobre lo que hará la gota para cifrar sería algo como esto:

  • Archivos / directorio se coloca en droplet
  • Los archivos / directorio están comprimidos
  • Se presenta una solicitud de contraseña
  • OpenSSL se utiliza para cifrar el archivo, el nombre del archivo se cambia a * .encrypted

Para descifrar:

  • El archivo se suelta en una gota
  • Si el archivo se llama * .encrypted, se presenta una solicitud de contraseña. Si no es así, cifre el flujo de trabajo
  • El archivo se descifra y se le cambia el nombre
  • Los archivos no están comprimidos

¿Alguien?

    
pregunta daviesgeek 04.05.2012 - 12:17

2 respuestas

1

En realidad, Automator no es una mala elección para esto, ya que te permite combinar AppleScript y shell scripting sin tener que mezclarlos (lo que te lleva directamente a escapar del infierno, después de una breve estadía en citar el purgatorio) y pasar valores Entre ellos una moda ordenada. Además, además de una aplicación de gota, Automator le permitirá crear un Servicio con una excelente integración en el Finder:

  1. Crear un nuevo flujo de trabajo de Automator.
    • seleccione "Aplicación" cuando se le pregunte qué tipo de flujo de trabajo debe crear, que le proporcionará una gota que procesa los archivos y carpetas que le envía, o
    • seleccione "Servicio" y configure "Acepta lo seleccionado" en "archivos y carpetas", que le proporcionará un elemento en el Finder Services y en el menú contextual de los archivos y carpetas (todas las traducciones son aproximadas, estoy en un sistema alemán) .
  2. Agregue una acción "Ejecutar AppleScript" y edite su contenido de la siguiente manera:

    on run {input, parameters}
        try
            tell application "System Events" to set thePassword to text returned of (display dialog "Please input your password for OpenSSL encryption" default answer "" with hidden answer)
        on error errorMessage number errorNumber
            if errorNumber is -128 then quit me -- user has canceled
            error errorMessage number errorNumber
        end try
        return (thePassword as list) & input
    end run
    

    : esto solicitará al usuario la contraseña de cifrado y la pasará como primer argumento a la siguiente acción.

  3. Agregue una acción "Ejecutar Shell Script", configurándola para obtener su entrada a través de argumentos (no stdin , como está predeterminado). Asegúrate de que la shell esté configurada en /bin/bash . Edite el contenido del script de la siguiente manera:

    [[ -n $1 ]] && password="$1" && shift || exit 0
    for f in "$@"; do
        if [[ ${f##*.} = "encrypted" ]]; then
            fname="${f%.encrypted}"
            openssl enc -d -aes-256-cbc -salt -in "$f" -out "$fname".tar.gz -pass pass:$password || continue
            tar -xPf "$fname".tar.gz && rm "$fname".tar.gz || continue
        else
            fname=$([[ -f $f ]] && printf "${f%.*}" || printf "$f")
            tar -czPf "$fname".tar.gz "$f" || continue 
            openssl enc -aes-256-cbc -salt -in "$fname".tar.gz -out "$fname".encrypted  -pass pass:$password && rm -f "$fname".tar.gz || continue
        fi
    done
    

    : esto descifra y untar-gzip .encrypted files, tar-gzip y cifra todos los demás archivos y directorios con el cifrado AES 256-CBC y la contraseña proporcionada.

Caveat Empteor: el manejo de errores es primitivo (básicamente, el bucle for omite una iteración cuando encuentra un error), no hay registro y no hay falla contra las entradas de contraseña incorrecta (no podría querer preguntar dos veces y comparar los resultados, como lo hace la utilidad de shell). Sin embargo, no deberían ocurrir desastres, ya que los archivos solo se eliminan cuando los pasos anteriores se completan con éxito.

Finalmente, es posible que desee investigar alternativas a la solicitud de una contraseña: un archivo de contraseña en una llave USB, por ejemplo (use -pass file:/Volumes/volname/passfile en lugar de -pass pass:$password , omita el paso Applescript y elimine la primera línea del script de shell) ), o almacenar su contraseña en el llavero de OS X y recuperarla mediante programación (consulte esta respuesta mía en Stack Exchange para maneras de hacerlo).

    
respondido por el kopischke 11.05.2012 - 22:26
1

Construí una gota de Applecript para comprimir & cifrar una carpeta. Es posible que deba cambiar los casos en Compress & descomprimir y cambiar el comando para lograr el mismo.

enlace

mire el código - enlace

Mi script es básicamente una versión un poco más embellecida de

enlace

    
respondido por el palaniraja 04.05.2012 - 16:19

Lea otras preguntas en las etiquetas