javascript - 使用 HMAC 方法和 Google Apps 脚本生成带 key 的哈希值

标签 javascript google-apps-script hmacsha1

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

<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));
};

我猜伪代码在哪里指出:hash(key)需要使用以下哈希函数之一:SHA-1、MD5、RIPEMD-128/160。

所以我在 JavaScript 中搜索了 SHA-1 并发现了这个:

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

任何有关如何使用 Javascript 创建 HMAC 值的信息将不胜感激。与此同时,我可能会继续努力。尽管它是 Javascript,但它是 Google .gs Apps 脚本代码文件,在服务器上运行。

最佳答案

Apps 脚本有一个内置的类实用程序,用于创建 HMAC Sha256 签名或 token :

Official Apps Script Documentation HMAC Sha256 signature

关于javascript - 使用 HMAC 方法和 Google Apps 脚本生成带 key 的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22889270/

相关文章:

javascript - 如何从一个 css 类中获取样式属性并将其设置为另一个 css 类?

javascript - 从命令行控制浏览器 javascript 执行

java - 混淆使用 AES 和 Hmac 的客户端和服务器如何相互验证

ruby - Rails 3 - 使用 HMAC-SHA256 签名响应

javascript - 在 Google Chrome Omnibar 中按 'Enter' 会导致事件在 DOM 上触发

javascript - 尝试使用 React 和 Express 在另一个选项卡中打开 .pdf 时显示空白内容

javascript - 以编程方式获取 Gmail 存储使用情况

twitter - 提取推文的完整内容

json - 使用 Google Sheets 作为图像轮播的 JSON feed

PHP 生成 HMAC-SHA1 签名