使用屏蔽密码连接到Wildfly Elytron的凭据存储



我有一个凭据存储,我用Elytron的工具创建了一个明文密码:"mypassword";。在我的Java程序中,我可以使用以下代码连接到商店;

Password storePassword = ClearPassword.createRaw(ClearPassword.ALGORITHM_CLEAR,"mypassword");
CredentialStore.ProtectionParameter protectionParameter = new CredentialStore.CredentialSourceProtectionParameter(
IdentityCredentials.NONE.withCredential(new PasswordCredential(storePassword)));
Provider provider = new WildFlyElytronPasswordProvider();
Security.addProvider(provider);
CredentialStore credentialStore = CredentialStore.getInstance(KeyStoreCredentialStore.KEY_STORE_CREDENTIAL_STORE);
// Configure and Initialise the CredentialStore
String configPath = System.getProperty("jboss.server.data.dir");
Map<String, String> configuration = new HashMap<>();
String path = configPath + File.separator + "credentials" + File.separator + "csstore.jceks";
configuration.put("keyStoreType", "JCEKS");
configuration.put("location", path);
configuration.put("modifiable", "false");
//Initialize credentialStore
credentialStore.initialize(configuration, protectionParameter);

但是,我现在想使用加密密码而不是明文连接到凭据存储。为此,我再次使用Elytron的工具创建了一个"蒙面逾越节";mypassword";使用以下命令;

elytron-tool.sh mask --salt 12345678 --iteration 123 --secret mypassword;

这里salt和迭代的值只是随机的,可以是任何值。上面的命令给了我屏蔽的密码,它是;

MASK-38PaKyS.9hHaRq7pAaE5tB;12345678;123

我现在需要一种方法,在我的Java程序中使用这个屏蔽密码连接到凭据存储。我发现还有一个类叫做"屏蔽密码";我可能会用,但我不知道怎么用。

有什么建议吗?

当您使用elytron工具生成屏蔽密码时,您会得到前缀为MASK-、后缀为salt的字符串和迭代在您的情况下-MASK-38PaKyS.9hHaRq7pAaE5tB;12345678;123

你可以使用下面的代码来解密被屏蔽的密码,

private char[] getUnmaskedPass(String maskedPassword) throws GeneralSecurityException {
int maskLength = enter code here"MASK-".length();
if (maskedPassword == null || maskedPassword.length() <= maskLength) {
throw new GeneralSecurityException();
}
String[] parsed = maskedPassword.substring(maskLength).split(";");
if (parsed.length != 3) {
throw new GeneralSecurityException();
}
String encoded = parsed[0];
String salt = parsed[1];
int iteration = Integer.parseInt(parsed[2]);
PasswordBasedEncryptionUtil encryptUtil = new PasswordBasedEncryptionUtil.Builder().picketBoxCompatibility().salt(salt).iteration(iteration)
.decryptMode().build();
return encryptUtil.decodeAndDecrypt(encoded);
}

现在,您可以在代码中使用它作为clearPassword。我希望这能有所帮助。

来源-https://github.com/wildfly-security/wildfly-elytron-tool/blob/master/src/main/java/org/wildfly/security/tool/MaskCommand.javastatic char[]decryptMasked(字符串掩码密码(

我们可以使用以下代码创建它。。。

Password storePassword = MaskedPassword.createRaw(MaskedPassword.ALGORITHM_MASKED_MD5_DES, <CREDENTIAL_STORE_ENTRY_PREFIX>.toCharArray(), 120,"12345678".getBytes(StandardCharsets.UTF_8),"MASK-38PaKyS.9hHaRq7pAaE5tB".getBytes(StandardCharsets.UTF_8));。。。。……

相关内容

  • 没有找到相关文章

最新更新