2012-07-02 26 views
6

Para abreviar, mi pregunta es: ¿Cómo puedo forzar a GnuPG qué clave privada/pública usar al cifrar/descifrar archivos?GnuPG: ¿Cómo encriptar/desencriptar archivos usando una determinada clave?


algunas explicaciones/Larga historia

tengo una aplicación que debe cifrar los archivos antes de enviarlos a S3.

Los usuarios pueden descargar sus archivos usando sus navegadores desde mi sitio web, en cuyo caso primero debo descifrar los archivos antes de servirlos.

lado

Cliente (delphi 2010): Estoy muy probablemente va a optar por OpenPGPBlackbox

lado del servidor (PHP 5), tengo que encontrar la manera de cifrar/descifrar archivos con los comandos no interactivos .

He instalado GnuPG en mi servidor, probamos este código:

clear_file='/full/path/my-file.zip' 
encrypted_file='/full/path/my-file.zip.pgp' 

# Encrypt file 
/usr/bin/gpg2 --encrypt "$clear_file" 

# Decrypt file 
/usr/bin/gpg2 --decrypt "$encrypted_file" 

pero parece que no puedo especificar, en la línea de comandos, que las llaves de su uso.

Cada usuario tendrá su propia clave pública/privada, por lo que necesito poder especificar qué clave utilizar para cifrar/descifrar el archivo en cuestión.

Mi pregunta es: ¿Cómo puedo forzar GnuPG qué clave privada/pública utilizar al cifrar/descifrar archivos?

Respuesta

7

Las opciones que usted está buscando son:

--default-key $name$ 
      Use $name$ as the default key to sign with. If this option is not used, the default key is 
      the first key found in the secret keyring. Note that -u or --local-user overrides this 
      option. 
--local-user $name$ 
    -u  Use $name$ as the key to sign with. Note that this option overrides --default-key. 

o posiblemente:

--recipient $name$ 
    -r  Encrypt for user id $name$. If this option or --hidden-recipient is not specified, 
      GnuPG asks for the user-id unless --default-recipient is given. 
--default-recipient $name$ 
      Use $name$ as default recipient if option --recipient is not used and don't ask if 
      this is a valid one. $name$ must be non-empty. 

Estos pueden ser usados ​​para especificar quién es el destinatario, por ejemplo, qué clave pública usar para firmar/cifrar. Al descifrar los archivos, GnuPG selecciona automáticamente la clave correcta si existe en el conjunto de claves actual, que se puede seleccionar con la opción --keyring, si existen varias. GnuPG también se puede configurar para buscar las claves necesarias de un servidor de claves si están disponibles allí.

Puede que también esté interesado en la opción --batch que se asegura de que no se formulen preguntas interactivas durante la ejecución.

Le sugiero que lea la página del manual de GnuPG. Hay muchas opciones que pueden ser útiles de vez en cuando.

+0

Gracias, sí, leí la página del manual (y ** me perdí **). Intenté este comando: '/ usr/bin/gpg2 -v --decrypt --default-key" private-1.pgp "/ full/home/my-file.7z.pgp' pero obtuve este' gpg: public la clave es 745ECDED gpg: cifrado con clave RSA, ID 745ECDED gpg: descifrado fallido: sin clave secreta ... cuidado con compartir un comando de ejemplo, por favor? ¡Gracias por adelantado! – TheDude

+0

También utilicé el modificador '--local-user' y el uso de la ruta completa para el archivo de clave privada, pero no ayudó – TheDude

+1

Puede ser que la clave no se encuentre en el llavero. No estoy completamente seguro de si puedes dar la clave de esa manera. Intenta primero importar la clave del llavero con 'gpg --allow-secret-key-import --import private-1.pgp' y luego descifrar con él:' gpg --decrypt my-file.7z.pgp'.Si esto no funciona, prueba desde la línea de comandos, no desde php, para descartar problemas con las variables de entorno, etc. Otra opción es que haya algún problema con el archivo de claves. – Edu

Cuestiones relacionadas