2017-05-02 138 views
0

我們正在使用scala中的「com.didisoft.pgp.PGPLib」幫助解密PGP文件。 這是工作正常與本地文件,但當我們運行它的HDFS文件,我們面臨的問題,如「文件未找到異常安全key」解密HDFS上的PGP文件

即使嘗試與gix的unix實用程序相同的事情,我們遇到了一個文件未找到當HDFS文件的路徑通過時發出問題。

下面是做工精細的本地文件多數民衆贊成示例代碼:

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") 

我們如何使用這些工具來解密我們的文件躺在HDFS?

回答

0

您不能像普通文件系統那樣訪問hdfs。您需要將文件下載到本地系統,然後使用本地文件,或者打開流或將文件加載到內存中,然後對其進行解密。

要使用GPG命令行

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

我不能回答如何與Java庫這樣做(這似乎是私有的),但有可能是一個辦法接受一個I​​nputStream,而不是的文件名。

爲了得到一個HDFS文件的InputStream的,你需要使用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

基於從puhlen示例代碼,我可以建議你試試這個:

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) 

別忘了用正確的HDFS路徑替換點