2017-05-02 1 views
0

Nous décryptons le fichier PGP à l'aide de "com.didisoft.pgp.PGPLib" dans scala. cela fonctionne très bien avec les fichiers locaux, mais quand nous courons pour les fichiers HDFS nous sommes confrontés à problème comme « File not found exception pour securingkey »Décryptage du fichier PGP qui est sur HDFS

Même en essayant la même chose avec l'utilité unix pour GPG nous avons fait face à un fichier non trouvé problème lorsque le chemin du fichier HDFS est passé.

est un exemple de code ci-dessous pour les fichiers locaux des thats fonctionne bien:

val decryptionPassword = "xxxx" 
val sec = "C:/Users/path/secring.gpg" 
val originalFileName =pgp.decryptFile("C:/Users/path/pgp_sample_file.PGP",sec, 
     decryptionPassword ,"C:/Users/path/opfile/PGP.txt") 

Comment pouvons-nous utiliser ces utilitaires pour décrypter nos fichiers se trouvant sur le HDFS?

Répondre

0

Vous ne pouvez pas accéder à hdfs comme un système de fichiers normal. Vous devez soit télécharger le fichier sur votre système local puis utiliser le fichier local, ou ouvrir un flux ou charger le fichier en mémoire puis décrypter cela.

Pour utiliser GPG de la ligne de commande

hdfs dfs -cat <hdfs_file_path> | gpg --batch --yes --passphrase <passphrase> -d 

Je ne peux pas répondre à la façon de le faire avec la bibliothèque Java (il semble être propriétaire), mais il y a probablement un moyen d'accepter un InputStream à la place d'un nom de fichier.

Pour obtenir un InputStream à partir d'un fichier HDFS, vous devez utiliser le hadoop fs api

val fs = org.apache.hadoop.fs.FileSystem.get(new org.apache.hadoop.conf.Configuration()) 
val inputStream = fs.open(new org.apache.hadoop.fs.Path(<filepath>)) 
0

Basé sur l'exemple de code à partir puhlen, je vous suggère d'essayer ceci:

val pgp = new com.didisoft.pgp.PGPLib() 
val decryptionPassword = "xxxx" 
val fs = org.apache.hadoop.fs.FileSystem.get(new org.apache.hadoop.conf.Configuration()) 
val keysStream = fs.open(new org.apache.hadoop.fs.Path("hdfs://.../secring.gpg")) 

val ks = new com.didisoft.pgp.KeyStore() 
ks.importKeyRing(keysStream) 

val inputData = fs.open(new org.apache.hadoop.fs.Path("hdfs://.../pgp_sample_file.PGP")) 
val outputData = fs.create(new org.apache.hadoop.fs.Path("hdfs://.../PGP.txt")) 

val originalFileName = pgp.decryptStream(inputData, ks, 
     decryptionPassword, outputData) 

(ne pas oublier de remplacer les points avec les chemins HDFS corrects)