【问题标题】:Yodlee getMFAResponse Byte Array for Captcha用于验证码的 Yodlee getMFAResponse 字节数组
【发布时间】:2016-03-31 04:13:00
【问题描述】:

我正在尝试从 Yodlee getMFAResponse 返回的字节数组(类似于[-1,0,2,-1] 等)创建一个编码字符串,以便我可以将其用作 HTML 中图像标签的源以显示验证码。 (在尝试为金融机构获取图像信息时,这似乎也是一个问题。

为此,我将字节数组从响应对象中取出,将其传递给btoa(),然后将其附加到以data:image/???;base64, 开头的字符串中,其中???是文件类型。我尝试过位图、jpeg、png、gif 等,但似乎都不起作用。我还尝试了“魔术字符串”方法来确定格式,但它与我找不到的格式匹配。我认为主要问题是我不知道文件的格式,但也许我只是没有正确解码。

我最终得到了这样的结果:

  data:image/jpeg;base64,NjYsNzcsNTgsMTE2LDAsMCwwLDAsMCwwLDU0LDAsMCwwLDQwLDAsMCwwLC05MSwwLDAsMCw0NSwwLDAsMCwxLDAsMzIsMCwwLDAsMCwwLDQsMTE2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtNSwtMSwwLC0xLC0xLC0xLDAsLTksLTksLTksMCwtMSwtNSwtMSwwLC0xLC0xLC0xLDAsLTEsLTUsLTEsMCwtMTcsLTE3LC0xNywwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC05LC0xMywtOSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC05LC05LC05LDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMTcsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDA='

我只在服务器端和客户端使用 Javascript,而且我不懂 Java(这似乎是大多数 Yodlee 答案所针对的)。我不知道是我对字节数组的解码是问题,还是我不知道正确的图像格式。

【问题讨论】:

    标签: javascript encoding bytearray captcha yodlee


    【解决方案1】:

    我在我的 js 文件上尝试了你的 Base64 字符串。它没有显示图像。我无权访问您的 btoa() 的 js 代码。但是,我在这里粘贴我的工作代码,也许问题在于将 byteArray 转换为 Base64。 (我正在使用 c#、angularJS 使用 Yodlee API)。

     function _arrayBufferToBase64(biteArray) {
        var binary = '';
        var bytes = new Uint8Array(biteArray);
        var len = bytes.byteLength;
        for (var i = 0; i < len; i++) {
            binary += String.fromCharCode(bytes[i]);
        }
        return window.btoa(binary);
    }
    

    然后这就是我在我的 js 文件中使用它使用 jQuery 填充 &lt;IMG /&gt; 的方式:

    let captchaImage64 = _arrayBufferToBase64(mfaLoginForm.fieldInfo.image);
                    let captchaImage = $('<img />', {
                        src: "data:image/png;base64," + captchaImage64,
                        class: "img img-responsive",
                        style: "margin:auto; max-width:250px; margin-bottom: 15px;"
                    });
    
    let captchaContainer = $('<div />', {
                        class: "form-group row",
                        id: "captchaContainer"
                    });
    
    captchaContainer.append(captchaImage);
    

    【讨论】:

    • 这看起来很有希望。您是否发现验证码始终采用 PNG 格式?
    • @PAckerman 我认为验证码格式在这种方法中并不重要。使用这种方法,我们需要的验证码就是 biteArray。上面代码中的 PNG 只是一种显示图像的格式。例如,您可以将其更改为 JPEG,它以 jpeg 格式显示图像。重要的部分是将 byteArray 正确转换为 base64 并将其添加到图像的 src 属性中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2013-04-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多