通过Google Apps脚本使用HMAC方法生成键控哈希值

问题描述:

有没有方法在Google Apps脚本中创建哈希值? Google Apps脚本将在.gs代码文件中运行服务器端代码。 .gs文件是用JavaScript编写的。由于JavaScript主要是客户端语言,并且对客户端的任何内容进行加密都不安全,也许像HMAC for Javascript这样的东西不可用?当我在hmac in javascript上进行网络搜索时,我得到的第一件东西是crypto-js。但它看起来像我需要<script>标签链接到一些服务:通过Google Apps脚本使用HMAC方法生成键控哈希值

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-md5.js"></script> 
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js"></script> 
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js"></script> 
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha512.js"></script> 
<script> 
    var hash = CryptoJS.HmacMD5("Message", "Secret Passphrase"); 
    var hash = CryptoJS.HmacSHA1("Message", "Secret Passphrase"); 
    var hash = CryptoJS.HmacSHA256("Message", "Secret Passphrase"); 
    var hash = CryptoJS.HmacSHA512("Message", "Secret Passphrase"); 
</script> 

Secret Passphrase将是您的客户端HTML。这没有任何意义!哦!我刚刚在维基百科找到了一些伪代码。

Wikipedia HMAC pseudo Code

这是我在重构它的尝试:

//blocksize is the size in bytes and is set to 64 bytes. 
//byte size of any UTF-8 string 

function byteCount(s) { 
    return encodeURI(s).split(/%..|./).length - 1; 
}; 

function hmac(key, message) { 
    var blocksize = 64; 
    var keyLngth = byteCount(key); 

    if (keyLngth > blocksize) { 
     key = hash(key); // keys longer than blocksize are shortened 
    } 
    else if (keyLngth < blocksize) { 
     key = key + [0x00 * (blocksize - keyLngth)]; // keys shorter than blocksize are zero-padded 
    }; 

    var o_key_pad = [0x5c * blocksize] ⊕ key; // Where blocksize is that of the underlying hash function 
    var i_key_pad = [0x36 * blocksize] ⊕ key; // Where ⊕ is exclusive or (XOR) 

    return hash(o_key_pad + hash(i_key_pad + message)); 
}; 

我想只要伪代码规定:SHA-1,MD5,RIPEMD-128 /:以下散列函数hash(key)一个160需要使用。

所以我做了SHA-1在JavaScript中搜索,发现这一点:

http://www.movable-type.co.uk

如何使用JavaScript创建一个HMAC值的任何信息,将不胜感激。与此同时,我可能会继续努力。即使它是Javascript,它也是一个Google脚本代码文件,可以在服务器上运行。

Google Apps脚本有一个内置的Class Utility创建HMAC SHA256签名或令牌:

Official Apps Script Documentation HMAC Sha256 signature