当前位置: 首页 > 知识库问答 >
问题:

如何在命令“java-Djasypt.encryptor.password=somepassword-jar name.jar”中隐藏密码

叶展
2023-03-14

我正在使用Jasypt加密并在属性文件的ENC()中指定属性值。解密密码是通过命令行参数发送的,如下java-Djasypt.encryptor.password=somepassword-jarname.jar。一切正常,但问题是当我搜索正在运行的进程时,它也显示密码。有没有办法通过从某处读取来隐藏加密密码?

我曾想过使用环境变量,但这也可能会暴露密码。所以,决定反对。

更新:有一个解决方案,在另一个所以Spring开机后如何隐藏密码在属性文件?

我遵循的解决方案是创建一个名为JASYPT\u ENCRYPTOR\u PASSWORD的环境变量,执行命令java-jar name。jar,然后取消设置环境变量。这是我想要的。

共有3个答案

司寇星海
2023-03-14

您完全可以使用Jasypt读取存储在属性文件中的可加密属性,如下所示:

datasource.username=reportsUser 
datasource.password=ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm) 

然后您可以从程序中检索属性(加密和非加密):

StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();     
encryptor.setPassword("jasypt"); // could be got from web, env variable...    

Properties props = new EncryptableProperties(encryptor);  
props.load(new FileInputStream("/path/to/my/configuration.properties"));

String datasourceUsername = props.getProperty("datasource.username");

String datasourcePassword = props.getProperty("datasource.password");

注意,在上面的示例中,未加密和加密属性的检索方式相同,而Jasypt自动处理解密/加密。

以下是相关Jasypt文档的链接:http://www.jasypt.org/encrypting-configuration.html

在SO中有一个类似的问题,有更多的细节:

https://stackoverflow.com/a/10307724/236528

匡祖鹤
2023-03-14

Jasypt是加密应用程序属性最常见、最简单的方法。

如上所述,您可以使用环境变量来存储Jasypt加密或解密的密码,并在将应用程序作为jar运行时传递该变量。

但是vault的用途完全不同,您可以在vault中存储和加密比需要的更多的内容,vault在加密方面为您提供了更多的控制。也可以使用Vault在运行时更新或更改值。

Vault中生成的秘密比用户定义的更具动态性,它完全抽象了加密。

因此,使用vault或JASYPT取决于您的用例。但两者在工业上都有广泛的应用。

作为开发人员,我更喜欢JASYPT,但作为一个整体项目,我在Prod中使用Vault。

太叔英卫
2023-03-14

我遵循的解决方案是创建一个名为JASYPT_ENCRYPTOR_PASSWORD的环境变量,执行命令java-jarname.jar然后取消设置环境变量。这和我预期的一样。

设置一个环境变量,时间是否短无关紧要,这不是一个好主意。即使是最短的时间也足以让攻击者访问它。也有类似的攻击,其中可以预测临时文件的名称,并允许攻击者使用该名称创建链接,例如访问/etc/passwd文件等。

这个问题已经存在了一段时间,所以已经有了几种解决方案,其中大部分都适用于包含密码的文件或用于对敏感数据进行加密和解密的密钥存储

例如,如果你看看JBoss,他们会使用一种叫做vault的东西。有一个手册页解释了单个步骤。您可以为您的应用程序重新创建所有这些内容,或者从指定文件名的文件中读取纯文本密码,例如作为系统属性。文件本身必须在文件系统级别(仅为所有者设置读取权限)以及(如有必要)在应用程序内设置安全管理器(SecurityManager),以防止未经授权的访问,该安全管理器拒绝用于读取该文件的类以外的其他类访问该文件。这是PGP或OpenSSL等安全相关应用程序的常见做法。

 类似资料:
  • 我想让我的Bash脚本对最终用户来说更加优雅。当Bash执行命令时,如何隐藏输出? 例如,当Bash执行时 以下内容将显示给执行Bash的用户: 现在我想对用户隐藏这一点,而是显示: 我怎样才能完成这项任务?我一定会帮助使脚本更加用户友好。如果发生错误,则应向用户显示。 我想知道如何显示相同的消息,而一组命令正在执行。

  • 在运行spark作业时,可以在事件日志中以纯文本形式看到SSL密钥密码、keystorepassword。你能帮我如何从日志中隐藏这些密码吗? 当我看到下面的内容时,https://issues.apache.org/jira/browse/spark-16796似乎是他们修复了它,使其不受web UI的影响。但我不确定我能用原木修复它 你的帮助真的很感激!! “{”事件“:”SparkListe

  • 问题内容: 我想隐藏密码输入。我在stackoverflow中看到许多答案,但如果按Backspace键,则无法验证值。条件返回false。 我尝试了几种解决方案来覆盖该函数,但是如果按退格键,则会出现缓冲区问题,我看到了不可见的字符。 我按:“ A”,退格键,“ B”,我的缓冲区中有:“ \ u0041 \ u0008 \ u0042”(toString()=’A \ bB’),而不是“ B”。

  • Spring Boot使用属性文件,至少在默认情况下,密码是纯文本的。有可能以某种方式隐藏/解密这些吗?

  • 本文向大家介绍MySQL在Linux系统中隐藏命令行中的密码的方法,包括了MySQL在Linux系统中隐藏命令行中的密码的方法的使用技巧和注意事项,需要的朋友参考一下 在命令行中输入命令并不是一个好主意,会造成安全问题。但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息。那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?,类似MySQL在ps命令下隐藏密

  • 问题内容: 我知道命令行界面(例如Git等)能够隐藏用户的输入(对于密码有用)。有没有办法用Java编程地做到这一点?我正在从用户那里输入密码,我希望他们的输入在该特定行(而不是所有用户)上被“隐藏”。这是我的代码(尽管我怀疑这会有所帮助…) 问题答案: 尝试。不过,您至少必须运行Java 6。 请注意,这不适用于Eclipse控制台。您必须从 真实的 console / shell / term