基于Java的Ansible vault机密解密解决方案

基于Java的Ansible vault机密解密解决方案,java,python,ansible,ansible-vault,Java,Python,Ansible,Ansible Vault,我们想制作一个基于java的解决方案,可以解密Ansible vault的秘密,具体取决于 我们制作了一个java测试解决方案来检查python代码的工作情况,但是第一步的结果不是预期的。 我们想就这个问题寻求一些帮助。为什么我们得不到正确的结果呢?基于python的方法是否可能与基于java的方法的工作方式不同 @Test public void testFirstStepOfImplementation() throws NoSuchAlgorithmException, In-validK

我们想制作一个基于java的解决方案,可以解密Ansible vault的秘密,具体取决于

我们制作了一个java测试解决方案来检查python代码的工作情况,但是第一步的结果不是预期的。 我们想就这个问题寻求一些帮助。为什么我们得不到正确的结果呢?基于python的方法是否可能与基于java的方法的工作方式不同

@Test
public void testFirstStepOfImplementation() throws NoSuchAlgorithmException, In-validKeySpecException {
   String salt = "33343835306666636239373663396363643766613363343837646633343933376633323964663030313461623564666130643664313438333363373037623365";
   String hmac = "66346632303234363338306133646136393261363338616337613039363435313631343437323164386661326633313339396238396236346239333863663265";
   String encryptedBytes = "653036663266373533343232393838343161396564333963643632653932303861356361316561303465373566373961393231343861623064313765643465376335666665326331323061373237336639356165393563613765663864366231";
   String saltAscii = hexToAscii(salt);
   System.out.println(saltAscii);
   System.out.println(hexToAscii(hmac));
   System.out.println(hexToAscii(encryptedBytes));
   final Charset asciiCs = Charset.forName("UTF-8");
   SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");

   // Here is the problematic method call
   PBEKeySpec spec = new PBEKeySpec(asciiCs.encode("password").toString().toCharArray(), hex-ToAscii(saltAscii).getBytes(), 10000, 80 * 8);

   SecretKey tmp = factory.generateSecret(spec);
   System.out.println(bytesToHex(tmp.getEncoded()));

   // It must be:
   // # KDF (80 bytes)
   // fc4a21fb71bfaad6a0bbb078f0704721
   // ccad80519fc349c3ff14268fced14203
   // 9bfb1a43effdfb8f8d7119387fccec54
   // 8859c7fccc26589a65a2ee856e05763f
   // 394f9f4a44152b33234cba44c930921b
}
但代码的结果是:

B4F0B2C365A1AB6D2ABAA18F687078896A739CA97FE55DBD5C0E0CEEA0D82D0391938442C5E1DB2C5F6E2E944A9338F452CB3892751EF27677F5CB29129943A558C17EADDF71C1835B3CD5494CE

而不是好的:

FC4A21FB71BFAAD6A0BBB078F0704721CCAD80519FC349C3FF14268FCED142039BFB1A43EFFFB8F8D7119387FCCEC548859C7FCCC26589A65A2EE856E05763F394F9F4A44152B33234CBA44C930921B


这里有一个Java库,它声称能够做到这一点:为什么这个被标记为
PowerShell
?@Theo我之所以给它贴上“PowerShell”的标签,是因为我在文章开头提到了一篇博文。但正如你所指出的,这在这个背景下是不相关的。Thx表示温和。@thomas.m您能解决这个问题吗?我也有类似的问题