使用CryptoJS解密图片并将其插入页面
Decryption a Picture using CryptoJS and Inserting it into a Page
出于一系列复杂的原因。 我们需要通过网络以加密状态发送图像,并使用 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
我是否必须向 CryptoJS 指定我使用的是 256 位加密?
问题似乎出在 CryptoJS 中的一个错误上,如果输入字符串包含新行,该错误会导致库不起作用。像这样对文件进行编码:
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 转换为 base 64 编码字符串的示例:
alert(hash.toString(CryptoJS.enc.Base64)); // L3dmip37+NWEi57rSnFFypTG7ZI25Kdz9tyvpRMrL5E=
相关文章:
- 将样式表插入iframe
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- 如何动态插入jquery代码
- 动态插入的表:JQuery未检测到最后一行
- 使用JavaScript动态插入DIV的成本有多高
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 将对象动态插入到现有对象中
- 将数组中的值插入到表中
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- 我如何在数字插入中使用逗号,这样它就不会'不要破坏我的输入字段
- 使用PHP插入HTML在JavaScript上不起作用
- javascript:将数据库中的数据插入到html5文本字段中
- 从数据库中获取数据并插入JavaScript变量
- 如何使用innerHtml正确插入html
- AngularJS指令,在元素后插入HTML
- CryptoJS和密钥/IV长度
- 当用户按下回车键时,自动在text区域/text中插入消息
- 如何使用JS禁用表行,并在MYSQL中插入所选选项
- 将文本插入光标所在的文本区域
- 使用CryptoJS解密图片并将其插入页面