4

我有一个在存储和传输时加密图像内容的解决方案:

  1. 对图片内容进行编码:base64 → AES → base64

  2. 通过ajax获取编码数据

  3. 将数据解码为base64数据encryptTo.js

  4. 通过数据 url 制作一个 Image 对象,例如:

         var image = new Image(); 
         image.src="data:image/jpeg,"+imgData.
    
  5. 显示图像对象

此解决方案适用于 Firefox 和 Safari。但它不适用于 Internet Explorer 或 Google Chrome。

原因是 Internet Explorer 或 Chrome 不很好地支持数据 URL(步骤 4)。无法创建图像对象。

我搜索并发现 Internet Explorer 很好地支持 MHT 文件格式。但它似乎只能插入到静态文件中。

我曾想过使用 VBScript 来调用一些 ActiveX 应用程序来解决这个问题。但我对 VBScript 并不熟悉。

我想得到一些帮助来弄清楚如何解决这个问题。带有 ActiveX 的 MHT 或 VBScript?哪个更受欢迎和更容易?

谢谢!

4

1 回答 1

2

更新:我正在向 OP 提供用于通过 JavaScript 加载图像的工作代码。该示例有两个图像,一个具有直接嵌入在 HTML 中的数据 URI,另一个具有由 Ajax 回调在下载包含 base64 图像数据的文本文件后构造的数据 URI。请注意

  • 空白在 URL 中正式不安全/不受支持,因此我提前从文本文件中的 base64 数据中删除了空白/换行符。您可以通过添加以下行来修改我的代码以在 JavaScript 中执行此操作base64img = base64img.replace(/\s+/g, '');
  • 查看此链接时,您应该会看到两张图片:http: //www.codelib.net/2013/7-9/example.html
  • 我的示例为 Ajax 等使用了一些非常精简的库函数,但我不建议您使用它们。您自己的功能应该也能正常工作。
  • 我的示例中的结果适用于最新版本的 Opera、Chrome、Firefox、Safari 和 Internet Explorer(包括版本 8)。
  • 尽管您正在加密和解密您的数据,但原则上显示图像的工作原理是一样的。但是,我建议您查看解密数据,以确保您的解密算法在所有浏览器中都能正常工作,如果您仍然无法正常工作。

构建数据 URI 的正确方法很重要。目前所有主流浏览器的最新版本都支持正确格式的数据 URI。听起来您正在根据您的评论使用正确的 URI 方案,但是查看您的代码将帮助其他人或我自己诊断正在发生的事情。

您是使用二进制数据形成数据 URI 还是将其保留为 base64 编码?将其保留为 base64 编码可能是必要的,以避免某些浏览器试图将二进制数据解释为 Unicode 字符值。您的图像src应该类似于下面的示例,但我只看到您的问题中的,而不是前面;base64的,这就是为什么我想知道您是否使用 base64 编码的 URL,它比尝试使用二进制数据更安全(即使它由 JavaScript 生成):

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==

也许您需要的只是;base64在逗号之前提供缺失的内容,然后它应该可以工作。Internet Explorer 从版本 8 开始就支持这样的数据 URI,在版本 9 中提供了更好的支持。谷歌浏览器肯定支持这种类型的图像。

请注意,用户仍然可以毫无问题地保存图像(我只是尝试保存数据图像,即使在 Internet Explorer 10 中也与保存普通图像没有什么不同)。即使您禁用右键单击,人们仍然可以打开文档检查器或其等效项,并通过检查页面资源来保存图像。您可以绘制到画布元素,但即便如此,用户仍然可以截屏并获得图像的逐像素渲染。

于 2013-07-09T05:51:05.093 回答