Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要一种加密密码的方法';从shell脚本传递到.properties文件中,稍后由java程序使用_Java_Shell_Encryption_Sh - Fatal编程技术网

需要一种加密密码的方法';从shell脚本传递到.properties文件中,稍后由java程序使用

需要一种加密密码的方法';从shell脚本传递到.properties文件中,稍后由java程序使用,java,shell,encryption,sh,Java,Shell,Encryption,Sh,此项目涉及获取用户提供的密码并将其用作.sh脚本的输入。此脚本使用密码(以及其他内容)创建文件\ u name.properties文件。创建此文件后,它将存储在服务器上。最终,该文件将由使用java的resourceBundle实用程序的java程序提取,并作为该程序的一部分使用。唯一的问题是,存储密码的文件_name.properties文件几乎可以供任何具有服务器访问权限的人打开,然后查看密码。我被指示以某种方式隐藏此密码,以便人们在服务器上打开文件时无法看到它。但是,密码仍然必须由jav

此项目涉及获取用户提供的密码并将其用作.sh脚本的输入。此脚本使用密码(以及其他内容)创建文件\ u name.properties文件。创建此文件后,它将存储在服务器上。最终,该文件将由使用java的resourceBundle实用程序的java程序提取,并作为该程序的一部分使用。唯一的问题是,存储密码的文件_name.properties文件几乎可以供任何具有服务器访问权限的人打开,然后查看密码。我被指示以某种方式隐藏此密码,以便人们在服务器上打开文件时无法看到它。但是,密码仍然必须由java程序使用。我不知道如何在shell脚本中伪装这个密码,然后在java程序中解码它。我也不能使用任何外部库。请注意,这不一定是一个密封的解决方案-如果打开文件的人能够轻松解码,这并不重要,我们只是不希望密码第一眼就能看到

我真的同意你的评论——何必费心呢

尽管如此,一种非常简单的方法是使用Base64编码。在Java 8中,您可以使用以下内容:

import java.util.Base64;

...

String originalPasswordString = "johnnyPuma";
byte[] encodedBytes = Base64.getEncoder().encode(
        originalPasswordString.getBytes());

// Save the file
Files.write(Paths.get("file.properties"), encodedBytes);


// Read the contents of the file
byte[] decodedBytes = Base64.getDecoder().decode(
        Files.readAllBytes(Paths.get("file.properties")));

String decodedPasswordString = new String(decodedBytes);

System.out.println(decodedPasswordString);
输出为:

约翰尼普玛

以及,文件内容:

am9obm55UHVtYQ==

幸运的是,如果从bash shell调用
base64
命令,如下所示:

base64Password=$(echo "johnnyPuma" | base64)
变量
base64Password
将包含相同的编码值,即
am9obm55UHVtYQ==

请注意,正如其中一条评论中所指出的。让应用程序用户拥有属性文件是一个非常好的主意。该用户还应该运行应用程序。如果操作正确,可以为该用户设置权限,以禁止“任何人”读取属性文件


最后,Base64的JavaDocs可以是安全的。

不必是安全的,只需要防止意外偷看?用0x42左右对每个字节进行异或(假设为ASCII)。最后一句话:那为什么还要麻烦呢?@xehpuk,很好的问题。这就是我被告知要做的事情,而像这样的愚蠢的问题通常让我一事无成。我会使用一些在shell和Java中很容易做到的东西,也许是base64编码?为什么不让一个拥有属性文件(并运行应用程序)的应用程序用户将权限设置为600;这样就不需要修改代码,人们也不能偷看密码。