3 votos

Uso de Automator o AppleScript para encriptar/desencriptar con OpenSSL

Me gustaría saber cómo usar Automator o AppleScript para crear un droplet que comprima/descomprima (tar.gz) y encripte/desencripte con archivos y/o directorios OpenSSL que caigan en él. El flujo de trabajo sobre lo que el droplet hará para encriptar sería algo así:

  • Los archivos/directorio se han caído en el droplet
  • Los archivos/directorio están comprimidos
  • Se presenta una solicitud de contraseña
  • OpenSSL se utiliza para encriptar el archivo, el archivo es renombrado a *.encrypted

Para desencriptar:

  • El archivo se ha caído en el droplet
  • Si el archivo se llama *.encrypted, se presenta una solicitud de contraseña. Si no es así, haga el flujo de trabajo de encriptación
  • El archivo es descifrado y renombrado
  • Los archivos están sin comprimir

¿Alguien?

2voto

Ryan Spears Puntos 1524

En realidad, Automator no es una mala opción para esto, ya que te permite combinar AppleScript y shell scripting sin tener que mezclarlos (lo que te lleva directamente al infierno de la fuga, tras una breve estancia en el purgatorio de las citas) y pasar valores entre ellos de forma ordenada. También, además de una aplicación droplet, Automator te permitirá crear un Servicio con una excelente integración en Finder:

  1. Cree un nuevo flujo de trabajo de Automator.

    • seleccione "Aplicación" cuando se le pregunte qué tipo de flujo de trabajo desea crear, con lo que obtendrá un droplet que procese los archivos y carpetas que le envíe, o
    • seleccione "Servicio" y establezca "Acepta seleccionados" a "archivos y carpetas" - eso le dará un elemento en los Servicios del Finder y el menú contextual de archivos y carpetas (todas las traducciones son aproximadas, estoy en un sistema alemán).
  2. Añade una acción "Ejecutar AppleScript" y edita su contenido como sigue:

    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 encriptación y la pasará como primer argumento a la siguiente acción.

  3. Añade una acción "Ejecutar Shell script", configurándola para que obtenga su entrada a través de argumentos (no stdin , como es el caso por defecto). Asegúrese de que el intérprete de comandos está configurado para /bin/bash . Edita el contenido del script como sigue:

    [[ -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 descifrará y desarticulará-gzip .encrypted archivos, tar-gzip y encriptar todos los demás archivos y directorios con encriptación AES 256-CBC y la contraseña dada.

Caveat Empteor: el manejo de errores es primitivo (básicamente, el for salta una iteración cuando encuentra un error), no hay registro y no hay seguridad contra la introducción de contraseñas erróneas (es posible que quieras preguntar dos veces y comparar los resultados, como hace la utilidad del shell). Sin embargo, no deberían ocurrir desastres, ya que los archivos sólo se eliminan cuando los pasos anteriores se completan con éxito.

Por último, es posible que desee investigar alternativas a la solicitud de una contraseña: un archivo de frase de contraseña en una llave USB, por ejemplo (utilice -pass file:/Volumes/volname/passfile en lugar de -pass pass:$password , omitir el paso de Applescript y eliminar la primera línea del shell script), o almacenar su contraseña en el llavero de OS X y recuperarla mediante programación (véase esta respuesta mía en Intercambio de pilas para saber cómo hacerlo).

1voto

Eli Bendersky Puntos 449

Construí un droplet de applescript para comprimir y encriptar una carpeta. Es posible que tenga que cambiar los casos en comprimir & descomprimir y cambiar el comando para lograr lo mismo.

https://github.com/palaniraja/PassArchive

mira el código - https://github.com/palaniraja/PassArchive/blob/master/PassArchive.app/Contents/Resources/scripts/main.scpt

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

http://hints.macworld.com/article.php?story=20040923120629702

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X