出于许多复杂的原因。我们需要在加密状态下通过网络发送图像,并使用AES在另一侧解密它们。在服务器端,发生了什么:

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

在客户端,这是我们正在使用的JavaScript:

<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>

我在输入和输出方面偏离了偏差,我无法弄清楚为什么我的一生。这是输入和输出:

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

我必须指定使用256位加密的加密j吗?

有帮助吗?

解决方案

该问题似乎是在加密J中的一个错误,如果输入字符串包含新行,则导致库不起作用。这样编码文件:

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

解决问题。 JavaScript想要的问题,但编码。好吧,有了JavaScript,因为Cryptojs中有一个错误: https://code.google.com/p/crypto-js/issues/detail?id=38

其他提示

从Cryptojs文档中,它提到了AES.decrypt的输出与哈希函数的输出相同。在 哈希输出部分 有一个示例将此WordArray转换为基础64编码字符串:

    alert(hash.toString(CryptoJS.enc.Base64)); // L3dmip37+NWEi57rSnFFypTG7ZI25Kdz9tyvpRMrL5E=
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top