【发布时间】:2016-04-01 12:56:09
【问题描述】:
我已经创建了一个 SSIS 包,它正在使用一个执行进程任务,在这个任务中,一个批处理文件正在被执行。此批处理文件正在执行一个 java CLass 文件。 java 代码从目录中读取 PGP 文件,然后导入私钥并执行 gpg filename.gpg 命令。成功执行后,它会提示输入密码。
gpg --allow-secret-key-import --import PrivateKey.gpg
gpg filename.gpg
提示输入密码
我想要实现的是避免这个提示,在我的 java 代码中自动化解密过程。那么是否存在一个命令,通过该命令我可以在没有提示的情况下输入密码。
这是我的java代码
private void decryptFiles(String encryptedFilePath, String keyFilePath){
try{
//location to encrypted gpg file
File encryptedFileLocation = new File(encryptedFilePath);
//location for key file that will be loaded
File keyFileLocation = new File(keyFilePath);
//changing dir and loading key
String []cmd = {"gpg", "--allow-secret-key-import --import Key.gpg"};
ProcessBuilder builder = new ProcessBuilder(cmd);
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec(cmd, null, keyFileLocation);
AutoDecrypter decrypterObj = new AutoDecrypter();
if(p!=null)
decrypterObj.displayCommandPromptOutput(p);
else
System.out.println("Unable to create Process");
if(encryptedFileLocation.isDirectory()){
//all file with gpg extension will be stored in this array
File[] allGpgFiles = encryptedFileLocation.listFiles(decrypterObj.new GpgFileFilter());
builder.directory(encryptedFileLocation);
cmd = new String[2];
cmd[0] = "gpg";
for(File f : allGpgFiles){
//taking feed files and decrypting them one by one
String fileName = (f.getName()).substring(0,(f.getName()).length()-4);
cmd[1] = "--output D:\\AutoDecrypt_Feeds\\feed\\"+f.getName()+" --passphrase 123 --symmetric D:\\AutoDecrypt_Feeds\\feed\\"+fileName;
System.out.println((f.getName()).substring(0,(f.getName()).length()-4));
builder.command(cmd);
p = builder.start();
decrypterObj.displayCommandPromptOutput(p);
System.out.println("- Decrypted");
}
}else{
System.out.println("Enter a directory!!");
}
}catch(Exception e){
System.out.println(e);
}
}
private void displayCommandPromptOutput(Process p) throws IOException {
//output of command prompt is displayed
BufferedReader bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));
String cmdOutuptTxt = "";
while((cmdOutuptTxt=bfr.readLine())!=null){
System.out.println(cmdOutuptTxt);
}
}
//to get only gpg files from any directory
class GpgFileFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String fileName) {
return fileName.endsWith(".gpg");
}
}
这是我试过的,没有错误没有提示但它没有解密文件
cmd[0] = "gpg";
cmd1 = "--output D:\AutoDecrypt_Feeds\feed\"+f.getName()+" --passphrase 123 --symmetric D:\AutoDecrypt_Feeds\feed\"+fileName;
【问题讨论】: