【问题标题】:Calculate MD5 or SHA of an Image using CryptoJS使用 CryptoJS 计算图像的 MD5 或 SHA
【发布时间】:2020-12-03 21:07:18
【问题描述】:

我有一个要求,我需要计算图像的哈希并将其上传到网络服务。使用 Cordova API 捕获图像,API 返回该图像的 URI。

我检查了 CryptoJS,但它以字符串作为输入。

var hash = CryptoJS.MD5("Message");

我们有什么方法可以计算图像的哈希值?

CryptoJS 库:CryptoJS Home Page

任何其他库也可以,只要它可以从 Cordova 应用程序中使用。

【问题讨论】:

    标签: javascript cordova md5 sha


    【解决方案1】:

    使用Cordova API,您可以获得Base64 编码的图像,而不是URI。您可以使用 CryptoJS 轻松散列。

    调用getPicture API 时,使用DATA_URL 选项获取Base64 编码图像作为结果:

    navigator.camera.getPicture(onSuccess, onFail, {
        destinationType: Camera.DestinationType.DATA_URL }); 
    

    这将返回onSuccess方法中的base64编码图像作为参数:

    function onSuccess(imageURI) {
        var hash = CryptoJS.MD5(imageURI);
    }
    

    【讨论】:

    • 是的,我知道,但是当我将它上传到 Amazon S3 时,我需要 URI 而不是 base64。我正在使用destinationType:Camera.DestinationType.FILE_URI
    • 在这种情况下使用FILE_URI,您可能需要cordova FILE 插件并使用URI 读取文件并对其内容进行哈希处理。
    • 是的,这正是我的想法。正在寻找是否有其他方式。因为你知道你使用的插件越多,Cordova 创造的头痛就越多:P
    【解决方案2】:

    这是我在 HTML 中生成图像文件 MD5 的方法:

    function onFileChange (e) {
      const readerBuffer = new FileReader()
      readerBuffer.readAsBinaryString(e.target.files[0])
      readerBuffer.onloadend = function (e) {
        const hash = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(e.target.result))
        const content-md5 = hash.toString(CryptoJS.enc.Base64)
      }
    }
    
    1. 需要以二进制形式读取图像。
    2. 阅读this后,我知道我们需要convert the string to bytes using Latin-1.

    此结果可用作 AWS 所需的 content-md5。

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      相关资源
      最近更新 更多