基于Java的Ansible vault机密解密解决方案
我们想制作一个基于java的解决方案,可以解密Ansible vault的秘密,具体取决于 我们制作了一个java测试解决方案来检查python代码的工作情况,但是第一步的结果不是预期的。 我们想就这个问题寻求一些帮助。为什么我们得不到正确的结果呢?基于python的方法是否可能与基于java的方法的工作方式不同基于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
@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您能解决这个问题吗?我也有类似的问题