我需要一些帮助来理解,如何将 SalesforceMarketingCloud 加密的字符串解密为 java。我应该承认我的问题中缺少一些东西,但这是迄今为止我所提供的
算法 – AES256, 256 位初始化向量 – 16 字节盐 – 8 字节密码短语 – “presharedpassphrase123”
据我了解,输入字符串已使用 EncryptSymmetric(@Clear, "AES", @null, @Passphrase, @null, @Salt, @null, @IV) 加密
但是当我尝试在 Java 端解密它时,由于各种原因它失败了。
到目前为止,当我使用如下组合时,我最好的方法是得到一个垃圾字符串作为输出
NoPadding、CBS 和使用 SHA-256 将我的密码(长度为 22 个字符)散列到 32 位
任何人都可以帮忙,您过去成功使用的任何 Java 代码示例。
private String decryptWithKey(String myKey, byte[] strToDecrypt) throws Exception
{
MessageDigest sha = null;
try {
key = myKey.getBytes(CHAR_SCHEME);
sha = MessageDigest.getInstance("SHA-256");
key = sha.digest(key);
key = Arrays.copyOf(key, 32);
secretKey = new SecretKeySpec(key, ALGO);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
byte[] ivByte = new byte[cipher.getBlockSize()];
ivByte = hexStringToByteArray("0716A494177F29F102AF33AFD0253BA1");;
System.out.println(new String(ivByte));
// IvParameterSpec ivParamsSpec = new IvParameterSpec(IV); IvParameterSpec ivParamsSpec = new IvParameterSpec(ivByte);
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParamsSpec);
setDecryptedString(new String(cipher.doFinal(strToDecrypt)));
}
catch (Exception e)
{
System.out.println("Error while decrypting: "+e.toString());
throw e;
}
return decryptedString;
}