Criptografia CryptoJS AES e descriptografia Java AES
Só estou perguntando isso, porque já li muitas postagens há 2 dias sobre criptografia AES de criptografia e, quando pensei que estava conseguindo, percebi que não estava conseguindo.
Esta postagem é a mais próxima do meu problema, tenho exatamente o mesmo problema, mas não há resposta:
Criptografia do AES CryptoJS e incompatibilidade do valor de descriptografia do JAVA AES
Eu tentei fazer isso de várias maneiras, mas não entendi direito.
Primeiramente
Estou recebendo a string já criptografada (só obtive o código para ver como eles estavam fazendo isso), portanto, modificar a maneira de criptografia não é uma opção. É por isso que todas as perguntas semelhantes não são tão úteis para mim.
Segundo
Eu tenho acesso à chave secreta e posso modificá-la (portanto, ajustar o comprimento é uma opção, se necessário).
A criptografia é feita no CryptoJS e eles enviam a cadeia criptografada como um parâmetro GET.
GetParamsForAppUrl.prototype.generateUrlParams = function() {
const self = this;
return new Promise((resolve, reject) => {
const currentDateInMilliseconds = new Date().getTime();
const secret = tokenSecret.secret;
var encrypted = CryptoJS.AES.encrypt(self.authorization, secret);
encrypted = encrypted.toString();
self.urlParams = {
token: encrypted,
time: currentDateInMilliseconds
};
resolve();
});
};
Posso facilmente descriptografar isso em javascript usando CryptoJS com:
var decrypted = CryptoJS.AES.decrypt(encrypted_string, secret);
console.log(decrypted.toString(CryptoJS.enc.Utf8));
Mas não quero fazer isso em Javascript, por motivos de segurança, por isso estou tentando descriptografar isso em Java:
String secret = "secret";
byte[] cipherText = encrypted_string.getBytes("UTF8");
SecretKey secKey = new SecretKeySpec(secret.getBytes(), "AES");
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.DECRYPT_MODE, secKey);
byte[] bytePlainText = aesCipher.doFinal(byteCipherText);
String myDecryptedText = = new String(bytePlainText);
Antes de ter alguma idéia do que estava fazendo, tentei decodificar a base64, adicionando um pouco de IV e muitas coisas que li, é claro que nada funcionou.
Mas depois que comecei a entender o que estava fazendo, escrevi esse script simples acima e recebi o mesmo erro no post:Comprimento de chave AES inválido
Não sei para onde ir daqui. Depois de ler muito sobre isso, a solução parece ser hash ou padding, mas não tenho controle sobre o método de criptografia, por isso não posso realmente fazer o hash do segredo ou preenchê-lo.
Mas, como eu disse, posso alterar a chave secreta para que ela corresponda a algum comprimento específico, e tentei alterá-la, mas como estou gravando no escuro aqui, não sei realmente se essa é a solução.
Então, minha pergunta basicamente é: se eu recebi a string criptografada (em javascript como o primeiro script) e a chave secreta, existe uma maneira de descriptografá-la (em Java)? Se for o caso, como fazer?