当前位置: 首页 > 知识库问答 >
问题:

使用应用程序脚本在Google Sheets中进行sha-256加密

东方化
2023-03-14
    null

格式为API密钥:时间戳:API操作:API秘密密钥

为了本例的目的,让我们假设

  1. API密钥是test123,
  2. 世界协调时日期:Thu,2011年4月14日22:44:22 GMT
  3. API操作是“分类帐”
  4. API密钥为UAV213q
def sha256():
    # tested on Python 3.8.5
    from urllib import parse, request
    import hashlib
    import datetime
    from time import strftime, gmtime

    # credentials and request params
    my_merchant_id = 'apikey'
    api_token = 'test123'
    api_secret_key = 'UAV213Q'
    my_timestamp = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
    api_version = 2.9
    action_verb = 'ledger'

    # set up request params
    data = parse.urlencode({'merchantId': my_merchant_id, 'token': api_token,
                        'version': api_version, 'action': action_verb})

    # authentication
    sig = api_token + ':' + my_timestamp + ':' + action_verb + ':' + api_secret_key
    sig_hash = hashlib.sha256(sig.encode('utf-8')).hexdigest()
    my_headers = {'x-ShareASale-Date': my_timestamp,
                'x-ShareASale-Authentication': sig_hash}

    print(sig_hash)

API密钥需要有时间戳才能发挥作用。我在考虑在应用程序脚本中计算它,因为它是一个已知的常数。例如,在加密脚本中,它将硬编码api令牌,以utc格式调用时间戳,并以正确的格式硬编码api秘密密钥,也许只是添加操作的函数,这样我就可以进行更改,所以它将是sha256(分类帐),它将合并到加密中

共有1个答案

秦钟展
2023-03-14

这个答案怎么样?

  • 当我看到您的python脚本时,我确认您问题中显示的规范与python脚本的规范不同。
    • 似乎thu,2011年4月14日22:44:22 GMTthu,2011年4月14日22:44:22+0000
    • 似乎需要使用摘要的“SHA_256”。

    当您的python脚本转换为Google Apps脚本时,它将变成如下所示。请将其复制并粘贴到脚本编辑器,并在脚本编辑器中运行函数myfunction。这样,您就可以在日志中看到结果值。

    function myFunction() {
      const api_token = 'test123';
      const api_secret_key = 'UAV213Q';
      const my_timestamp = 'Thu, 14 Apr 2011 22:44:22 +0000';
      const action_verb = 'ledger';
    
      const value = `${api_token}:${my_timestamp}:${action_verb}:${api_secret_key}`;
      const bytes = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, value);
      const res = bytes.map(byte => ('0' + (byte & 0xFF).toString(16)).slice(-2)).join('');
      console.log(res)
    }
    
    8c3a6873fe71c402dc1e3ca7bc828712e3dfb7a66ed09feeeca2152dd809df81
    
      null
    const my_timestamp = new Date().toUTCString().replace("GMT", "+0000");
    

    当您想要以大写的形式检索值时,请使用下面的脚本。但是当我测试您的python脚本时,结果值是小写的。所以请小心这个。

    function myFunction() {
      const api_token = 'test123';
      const api_secret_key = 'UAV213Q';
      const my_timestamp = 'Thu, 14 Apr 2011 22:44:22 +0000';
      const action_verb = 'ledger';
    
      const value = `${api_token}:${my_timestamp}:${action_verb}:${api_secret_key}`;
      const bytes = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, value);
      const res = bytes.map(byte => ('0' + (byte & 0xFF).toString(16)).slice(-2)).join('').toUpperCase();
      console.log(res)
    }
    
    • 在本例中,获得8C3A6873FE71C402DC1E3CA7BC828712E3DFB7A66ED09FEEECA2152DD809DF81
    • toutcstring()
    • touppercase()

 类似资料:
  • 当我尝试安装 patroni 时,我可以使用 md5 初始化数据库,所有的集群都运行良好。. 但当我试图用初始化紧急停堆sha 256安装patroni时,它没有启动,状态也保持不变 群集中所有数据库实例的“副本”。同样在patroni日志上,我可以看到这个错误“”postgres“没有有效的SCRAM验证器”。解决方案是什么? 信息:password_encryption是scram-sha 2

  • 我是新来的谷歌工作表脚本和卡住试图做以下事情。我有2列:C包含开始时间码,D包含结束时间码。第三列(F)包含从开始时间码和结束时间码产生的电影提示的长度。由于时间码来自脚本,因此包含结果的单元格不能导出为其他格式。因此,我试图创建第四列,将列F的结果打印为值。我设法写了一个小脚本,可以做到这一点。它看起来像这样: 问题是,当我编辑C或D中的任何时间码时,它不会自动执行。 所以我试了一下: 它没有给

  • 我试图在Firebase中创建一个动态链接,当我选择android应用程序时,它显示一个错误,说“将SHA-1添加到这个android应用程序”,我已经添加了一个凭据,但我不确定我到底如何“将SHA-1添加到应用程序” 这是怎么做到的?

  • 我想找到一个解决方案或方法,使我能够添加盐和控制迭代次数。本机Rfc2898DeriveBytes基于HMACSHA1。理想情况下,使用SHA-256或SHA-512将使系统经得起未来的考验。 这是迄今为止我发现的最好的例子:http://jmedved.com/2012/04/pbkdf2-with-sha-256-and-others/但是当我用SHA-256运行它时,它实际上比用SHA-51

  • 我有一个打包成WAR文件的Spring Boot web应用程序,我希望能够按需运行一些任务(脚本或命令)。例如: 初始化数据库模式 以编程方式为数据库设定种子 新版本应用程序(移动文件、数据库操作等)需要时进行数据迁移 验证存储文件和数据库内容之间的数据完整性 如果这些“命令”可以访问与Web应用程序本身相同的bean(服务,DAO)和模型,则实现起来会容易得多。我希望我必须在某个地方创建一个S

  • 我在谷歌工作表中有一个下拉菜单,它引用了不同工作表中的值。 参考表A行值1,B行值1:Value1\u说明值2:Value2\u说明。 在我的工作表中,单元格中有一个下拉菜单,用于设置和显示值1、值2等。 我希望下拉菜单显示参考表Value1:Value1_说明、Value2:Value2_说明等中的显示名称,但仅将Value1 Value2等设置为单元格中的值。 确实如此,但是在谷歌的表单中ht

  • 如何在Vue.js应用程序中动态加载JavaScript脚本? 以下是一个简单的解决方案: 但是第一行不加载脚本(它不向HTML添加元素)。 第二行是有效的。第二行是相同的,只是将app变量替换为纯文本(

  • 我有这张表: 个人财务表 我使用此脚本对A列和B列进行“OneEdit”排序: 现在,我不想对A列进行排序,而是对其进行筛选,以便不显示选中的复选框: 想要过滤视图 似乎与和有关,但我真的搞不清楚。 有人能帮帮我吗? 谢谢