【问题标题】:Twitter Oauth 1.0 Signature Creation, how to convert "binary string" to base64Twitter Oauth 1.0 签名创建,如何将“二进制字符串”转换为 base64
【发布时间】:2020-07-24 18:05:25
【问题描述】:

截至目前,我正在为 Twitter 的 OAuth 1.0 创建签名。
我关注this
最后我遇到了一个小问题。

他们有

84 2B 52 99 88 7E 88 7602 12 A0 56 AC 4E C2 EE 16 26 B5 49

他们设法创造

hCtSmYh+iHYCEqBWrE7C7hYmtUk=

他们的解释是将“二进制字符串”编码为base64。

我在这个stackoverflow question 看到我基本上需要解码十六进制然后编码base64 来获取

84 2B 52 99 88 7E 88 7602 12 A0 56 AC 4E C2 EE 16 26 B5 49

hCtSmYh+iHYCEqBWrE7C7hYmtUk=

它在online calculator 中工作,所以现在我需要将它实现为 javascript,Base64 编码工作正常,看起来像这样:

Buffer.from("ExampleString").toString('base64')

但是十六进制解码似乎是问题所在 我从here得到了解决方案。
这是我的十六进制解码器

String.prototype.hexDecode = function(){
  var j;
  var hexes = this.match(/.{1,4}/g) || [];
  var back = "";
  for(j = 0; j<hexes.length; j++) {
      back += String.fromCharCode(parseInt(hexes[j], 16));
  }

  return back;
}

当我使用“我的”解码器和在线计算器时,我得到一个不同的字符串,你知道吗?

【问题讨论】:

    标签: javascript oauth twitter-oauth oauth-1.0a


    【解决方案1】:

    找到答案here

    function oAuthSignature(base_string, signing_key) {
        var signature = hmac_sha1(base_string, signing_key);
        return percentEncode(signature);
    };
    
    var jsSHA = require('jssha');
    function hmac_sha1(string, secret) {
        let shaObj = new jsSHA("SHA-1", "TEXT");
        shaObj.setHMACKey(secret, "TEXT");
        shaObj.update(string);
        let hmac = shaObj.getHMAC("B64");
        return hmac;
    };
    
    function percentEncode(str) {
      return encodeURIComponent(str).replace(/[!*()']/g, (character) => {
        return '%' + character.charCodeAt(0).toString(16);
      });
    };
    

    如果有人愿意解释答案,请随意,因为我很想理解它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 2012-09-01
      • 2015-01-02
      • 1970-01-01
      • 2011-09-17
      相关资源
      最近更新 更多