Java 在加密属性文件中加密密码

Java 在加密属性文件中加密密码,java,encryption,cxf,Java,Encryption,Cxf,问题 我使用的是ApacheCxf3.0.7,在中读到,您可以在Crypto属性文件中存储密钥库密码的(BASE-64编码)加密版本,但我不知道如何添加它,我没有找到此实现的示例 在ApacheWeb上显示: 加密属性文件内容的典型示例(例如 签名创建)如下所示: 请注意,用于加载密钥库的密码是明文。一个新的 Apache WSS4J 2.0.0的特点是能够存储 中密钥库密码的(BASE-64编码)加密版本 加密属性文件。定义了一个新的PasswordEncryptor接口 允许对密码进行加密/

问题

我使用的是ApacheCxf3.0.7,在中读到,您可以在Crypto属性文件中存储密钥库密码的(BASE-64编码)加密版本,但我不知道如何添加它,我没有找到此实现的示例

在ApacheWeb上显示:

加密属性文件内容的典型示例(例如 签名创建)如下所示:

请注意,用于加载密钥库的密码是明文。一个新的 Apache WSS4J 2.0.0的特点是能够存储 中密钥库密码的(BASE-64编码)加密版本 加密属性文件。定义了一个新的PasswordEncryptor接口 允许对密码进行加密/解密。违约 现在提供了基于Jasypt的实现,称为 JasyptPasswordEncryptor,它使用“PBewithmD5和Tripledes”

WSPasswordCallback类还有一个名为 WSPasswordCallback.PASSWORD\u ENCRYPTOR\u PASSWORD,用于 返回用于PasswordEncryptor的主密码 实施当WSS4J通过 属性文件,并且它遇到了按以下格式加密的密码 “ENC(encoded encrypted password)”,它向回调处理程序查询 通过此WSPasswordCallback使用标记输入密码。有可能通过 通过新的 配置标记ConfigurationConstants.PASSWORD\u加密程序\u实例 (“passwordEncryptorInstance”)

可以将自定义密码加密程序实现传递给 WSS4J通过新的配置标签 ConfigurationConstants.PASSWORD\u加密程序\u实例 (“passwordEncryptorInstance”)

我想我必须在我的属性文件中声明如下内容:

org.apache.wss4j.crypto.merlin.keystore.password=ENC(?????)
if (usage==WSPasswordCallback.PASSWORD_ENCRYPTOR_PASSWORD){
                ????
    }
但我不知道如何使用实现的默认JasyptPasswordEncryptor加密我的密码。 另外,我猜在我的CallbackHandler中我会有这样的东西:

org.apache.wss4j.crypto.merlin.keystore.password=ENC(?????)
if (usage==WSPasswordCallback.PASSWORD_ENCRYPTOR_PASSWORD){
                ????
    }
解决方案

好的,随着测试的运行,我测试了我的解决方案,现在开始工作了

  • 下载
  • 使用此命令获取编码密码 加密输入=真实密钥库密码密码=主密码算法=PBEWITHMD5和Tripedes
  • 复制输出(示例:0laAaRahTQJzlsDu771tYi)
  • 在使用此算法时,需要Java加密扩展(JCE)的无限强度。把你的JDK放进去
  • 将编码输出放入属性中

    org.apache.wss4j.crypto.provider=org.apache.wss4j.common.crypto.Merlin org.apache.wss4j.crypto.merlin.keystore.type=jks org.apache.wss4j.crypto.merlin.keystore.password=ENC(0laAaRahTQJzlsDu771tYi) org.apache.wss4j.crypto.merlin.keystore.alias=my_alias org.apache.wss4j.crypto.merlin.keystore.file=/etc/cert/my_keystore.jks

  • 在CallbackHandler中,输入用于生成编码密码的主密码:

    公共类WsPasswordHandler实现CallbackHandler{

    @Override
    public void handle(Callback[] callbacks) throws IOException,
            UnsupportedCallbackException {
        for (Callback callback: callbacks){
            WSPasswordCallback pwdCallback= (WSPasswordCallback) callback;
            final int usage =pwdCallback.getUsage();
            if (usage==WSPasswordCallback.SIGNATURE||usage==WSPasswordCallback.DECRYPT){
                pwdCallback.setPassword("parKeyPassword");
            }
            if (usage==WSPasswordCallback.PASSWORD_ENCRYPTOR_PASSWORD){
                pwdCallback.setPassword("master_password");
            }
        }           
    }
    
    }


  • 就是这样。。。现在,我必须弄清楚如何在外部local.property中使用Spring等。。但这是另一段历史。。谢谢大家!

    此测试应能帮助您:

    您可以通过使用主密码实例化JasyptPasswordEncryptor(如测试中所示)来获得加密密码,并加密密钥库密码。然后将其复制到您的加密属性中:


    Colm.

    谢谢你的测试。。它现在可以工作了,当我尝试Jasypt命令行时,我的密码错了!;)