Cipher/Encrypt 并使用 Talend Data Integration 解密 .properties 文件中的密码

Cipher/Encrypt and uncrypt passwords in .properties files using Talend Data Integration

运行 作业的一种建议方法是将上下文参数保存在属性文件中。 喜欢这个:

#
#Wed Dec 16 18:23:03 CET 2015 
MySQL_AdditionalParams=noDatetimeStringSync\=true 
MySQL_Port=3306   
MySQL_Login=root 
MySQL_Password=secret_password_to_cipher 
MySQL_Database=talend MySQL_Server=localhost

这真的很简单也很有用,但问题是密码是明文保存的。

所以我正在寻找轻松加密的方法。 这里有 2 个非常有趣的问题,已经在 Stack overflow 中讨论过关于密码加密技术的问题:

但它们是 Java 原生的,我正在寻找更好的 Talend 集成。我已经在我的 Talend 作业中尝试过不同的方法:

所有这些技术都在教程(法语,对不起)中描述,解释如何 crypt passwords in Talend

但是遇到了另一个问题:用于cipher/uncipher的密钥总是清晰的,所以如果你知道解决这一点的好方法我会很高兴实验一下.

从根本上说,任何应用程序可以访问的内容都可以通过侵入 system/taking 应用程序控制权的人访问。 即使您使用混淆(例如 base64 或更高级),或在密钥可用的情况下使用真正的加密(即使它们也可能被混淆)。

所以基本上没有足够好的方法来做你想要做的事情,更糟的是:它根本不存在。

那你会怎么做呢?

1.限权

MySQL_Login=root 是个大问题……应用程序的妥协将导致数据库(及其数据)立即受到损害。

因此,将权限限制在应用程序绝对需要的范围内。

这确实应该做,而且很容易实现。

2。单独的用户和管理员级别访问权限

如果仅在用户交互后才需要某些东西,您可以使用用户提供的秘密(例如,用户的密码可以提供哈希值,可以 xor-ed 并为您提供一个密钥并不总是出现在应用程序或配置文件中)。

您可以使用这个,例如将权限分为两个级别:普通用户级别,仅具有使应用程序为普通用户工作的最低限度权限(但例如,不允许管理应用程序本身的应用程序管理权限),并使用保留的秘密当没有管理员登录到应用程序的管理部分时,用户将(部分)密钥保存在应用程序之外。

老实说,这很难做到,也不是那么容易。

但即使有了所有这些,您基本上 也必须 考虑访问例如如果应用程序被破坏,数据库将被破坏。

这也是为什么在没有采取适当预防措施的情况下不应(绝不能)将应用程序用户密码等数据存储在数据库中的原因。