开发者

javascript how to Constructing a Signature?

i have this pseudo code and i would like to convert it into working code:

string constructSignature(string timestamp, string UID, string secretKey) {  
  baseString = timestamp + "_" + UID;                                  // Construct a "base string" for signing  
  binaryBaseString = ConvertUTF8ToBytes(baseString);    // Convert the base string into a binary array  
  binaryKey = ConvertFromBase64ToBytes(secretKey);     // Convert secretKey from BASE64 to a binary array  
  binarySignature = hmacsha1(binaryKey, baseString);开发者_如何学编程      // Use the HMAC-SHA1 algorithm to calculate the signature  
  signature = ConvertToBase64(binarySignature);              // Convert the signature to a BASE64  
  return signature;  
} 

any idea? thanks


Some ideas:

  • Don't calculate BinaryBaseString, given that you never use it
  • Don't refer to UTF8 for no reason at all -- strings in JavaScript are Unicode, which is only distantly connected to UTF.
  • Don't put implementation details in your pseudocode -- especially ones you don't actually need (like assuming the secret key should be in "bytes", whatever that means, when in fact, the standard library takes and returns strings).
  • Don't write comments that just restate what the code is doing.

Which leaves us with:

var constructSignature = function(timestamp, UID, secretKey) {  
  return Crypto.HMAC(Crypto.SHA1, timestamp + "_" + UID, secretKey,
                     { asString: true }); 
};


Here is a full implementation of your code:

let atob = function(a){
    return new Buffer(a, 'base64').toString('binary');
} 

function ConvertUTF8ToBytes(str) {
    var utf8 = unescape(encodeURIComponent(str));
    var arr = [];
    for (var i = 0; i < utf8.length; i++) {
        arr.push(utf8.charCodeAt(i));
    }
    return new Uint8Array(arr);
}

let ConvertFromBase64ToBytes = function (b64Data){
    var byteCharacters = atob(b64Data);
    var byteNumbers = new Array(byteCharacters.length);
    for (var i = 0; i < byteCharacters.length; i++) {
        byteNumbers[i] = byteCharacters.charCodeAt(i);
    }
    return new Uint8Array(byteNumbers);
}

let constructSignature = function(timestamp, UID, secretKey) {  
    let baseString = timestamp + "_" + UID;
    let binaryBaseString = ConvertUTF8ToBytes(baseString)
    let binaryKey = ConvertFromBase64ToBytes(secretKey)
    let binarySignature = Crypto.createHmac('sha1', binaryKey)
      .update( binaryBaseString )
      .digest('base64');
    return binarySignature;            
};
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜