我创建了一个SSIS包,它正在使用Execute Process任务。在此任务中,批处理文件正在执行。该批处理文件正在执行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”;
cmd 1 =“ - 输出D:\ AutoDecrypt_Feeds \ feed \”+ f.getName()+“ - passphrase 123 --symmetric D:\ AutoDecrypt_Feeds \ feed \”+ fileName; < / p>
答案 0 :(得分:0)
您可以使用options to specify a passphrase:
- 密码短文件
从文件文件中读取密码。只从文件文件中读取第一行。这只能用于 提供一个密码短语。显然,密码存储在一个文件中 如果其他用户可以读取此文件,则安全性有问题。唐&#39;吨 如果可以避免,请使用此选项。请注意,此密码只是 如果还给出了选项--batch,则使用。这不同于 GnuPG版本1.x.
- 密码短语
使用字符串作为密码。仅在仅提供一个密码短语时才能使用此选项。显然,这是非常的 多用户系统的可疑安全性。如果,请不要使用此选项 你可以避免它。请注意,此密码仅在选项时使用 - 也已经给出了补丁。这与GnuPG版本1.x不同。
或者你可以generate a key without a passphrase。
请记住,这些都有安全隐患,如文档中所述:如果您对自己所做的事情不是很谨慎,那么它基本上相当于将密钥存储到您的在你的门垫下的房子。