Pergunta

Por uma série de razões complicadas. Precisamos enviar imagens pela rede em estado criptografado e descriptografá -las do outro lado usando o AES. No lado do servidor, aqui está o que acontece:

openssl aes-256-cbc -in pup.jpg -out pup.jpg.enc
base64 pup.jpg.enc > pup.jpg.enc.b64

No lado do cliente, aqui está o JavaScript que estamos usando:

<img id="picture"/>
<script>
    var picture = document.getElementById("picture");
    var data = new XMLHttpRequest();
    data.open('GET', 'http://server.com/pup.jpg.enc.b64', true);
    data.onreadystatechange = function(){
        if(this.readyState == 4 && this.status==200){
            var dec = CryptoJS.AES.decrypt(data.responseText, "password");
            var plain = CryptoJS.enc.Base64.stringify( dec );
        picture.src = "data:image/jpeg;base64,"+plain;
        }
    };
    data.send(null);
</script>

Estou recebendo um desvio na entrada e saída e não consigo descobrir o porquê, para a minha vida. Aqui está a entrada e saída:

In:  /9j/4RLKRXhpZgAATU0AKgAAAAgADAEAAAMAAAABBADJx...
Out: /9j/4RLKRXhpZgAATU0AKgAAAAgADAEAAAMAAAABBAAAA...
                                               ^-- deviation

Eu tenho que especificar para os criptografos que estou usando a criptografia de 256 bits?

Foi útil?

Solução

O problema parece estar com um bug no Cryptojs que faz com que a biblioteca não funcione se a string de entrada contiver novas linhas. Codificando o arquivo como este:

openssl enc -aes-256-cbc -in pup.jpg -pass pass:"password" | base64 | tr -d '\n' > pup.enc

Corrige o problema. O problema deseja com o JavaScript, mas com a codificação. Bem, e com JavaScript, porque há um bug no Cryptojs: https://code.google.com/p/crypto-js/issues/detail?id=38

Outras dicas

A partir da documentação do CryptoJS, ele menciona a saída do AES.DECRYPT é o mesmo tipo que a saída de uma função de hash. Dentro a seção de saída de hasher Há um exemplo de converter este WordArray em uma string codificada base 64:

    alert(hash.toString(CryptoJS.enc.Base64)); // L3dmip37+NWEi57rSnFFypTG7ZI25Kdz9tyvpRMrL5E=
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top