【问题标题】:How to write a base32_decode in JavaScript?如何在 JavaScript 中编写 base32_decode?
【发布时间】:2011-09-03 12:07:29
【问题描述】:

我正在尝试创建 PHP 的解包功能。我注意到 PHPJS 项目没有它。我需要它来实现 base32_encode 和 base32_decode(使用Crockford's alphabet'0123456789ABCDEFGHJKMNPQRSTVWXYZ')。

我在任何地方都找不到它,从它的对应部分来看,PHPJS's pack function 我怀疑我的版本很快就会完成并且没有错误。

【问题讨论】:

    标签: javascript unpack phpjs


    【解决方案1】:
    base32tohex = (function() {
        var dec2hex = function(s) {
            return (s < 15.5 ? "0" : "") + Math.round(s).toString(16)
        }
          , hex2dec = function(s) {
            return parseInt(s, 16)
        }
          , base32tohex = function(base32) {
            for (var base32chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", bits = "", hex = "", i = 0; i < base32.length; i++) {
                var val = base32chars.indexOf(base32.charAt(i).toUpperCase());
                bits += leftpad(val.toString(2), 5, "0")
            }
            for (i = 0; i + 4 <= bits.length; i += 4) {
                var chunk = bits.substr(i, 4);
                hex += parseInt(chunk, 2).toString(16)
            }
            return hex
        }
          , leftpad = function(str, len, pad) {
            return len + 1 >= str.length && (str = new Array(len + 1 - str.length).join(pad) + str),
            str
        };
        return base32tohex;
    }
    )()
    

    【讨论】:

    • 为了符合rfc4648,计算十六进制表示的for循环应该改为for (i = 0; i + 8 &lt;= bits.length; i += 8)。这是因为 base32 输入为小数字节是非法的,因此我们必须忽略解码字符串末尾剩余的任何位。
    【解决方案2】:

    您可以修改 JavaScript Base64 function 以使用较小的字母表。

    【讨论】:

    • 这不是微不足道的,因为块的长度也发生了变化。编码序列由 8 个八位字节的块组成,而不是像在 base64 中那样来自 3 个八位字节的块。
    【解决方案3】:

    这个呢?看起来它会让你走到一半。

    http://forthescience.org/blog/2010/11/30/base32-encoding-in-javascript/

    【讨论】:

      【解决方案4】:

      原来有人已经完成了编码和解码功能

      https://github.com/agnoster/base32-js/blob/master/lib/base32.js

      【讨论】:

      • 是否有没有crypto包的包,因为它不能在浏览器中运行。它必须有节点
      猜你喜欢
      • 2016-08-03
      • 1970-01-01
      • 2014-04-02
      • 2020-01-30
      • 2013-12-08
      • 2019-07-09
      • 2012-05-22
      • 2016-11-24
      • 1970-01-01
      相关资源
      最近更新 更多