【问题标题】:How to create sha256 hash with salt如何用盐创建 sha256 哈希
【发布时间】:2019-10-16 07:55:42
【问题描述】:

我想将哈希生成迁移到具有 SHA256 但没有盐作为参数的 BigQuery。

例如在R 我可以这样做:

library(openssl)
sha256("test@gmail.com", key = "111")
# [1] "172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031"

更新

与基于答案here的python相同:

import hmac
import hashlib
print(hmac.new(b"111", b"test@gmail.com", hashlib.sha256).hexdigest())
# 172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031

【问题讨论】:

    标签: hash google-bigquery salt


    【解决方案1】:

    我希望“迁移”是指迁移逻辑而不是 R Sha256() 函数的确切字节输出。

    R用的是hmacsha256,看Microsoft's HMACSHA256 class,大致可以表示为:

    HMAC 过程将密钥与消息数据混合,使用散列函数对结果进行散列,再次将该散列值与密钥混合,然后再次应用散列函数。输出哈希的长度为 256 位。

    create temp function hmacsha256(content STRING, key STRING)
    AS (SHA256(
         CONCAT(
           TO_HEX(SHA256(CONCAT(content, key))), key)
           ));
    
    SELECT TO_HEX(hmacsha256("test@gmail.com", "111"));
    

    输出:

    +------------------------------------------------------------------+
    |                               f0_                                |
    +------------------------------------------------------------------+
    | 4010f74e5c69ddbe1e36975f7cb8be64bcfd1203dbc8e009b29d7a12a8bf5fef |
    +------------------------------------------------------------------+
    

    【讨论】:

    【解决方案2】:

    在@Yun 的帮助下,我设法解决了这个问题。

    要应用 HMAC,您需要在下面的示例函数中包含外部库 file

    CREATE TEMP FUNCTION USER_HASH(message STRING, secret STRING)
      RETURNS STRING
      LANGUAGE js
      OPTIONS (
        -- copy this Forge library file to Storage:
        -- https://cdn.jsdelivr.net/npm/node-forge@0.7.0/dist/forge.min.js
        -- @see https://github.com/digitalbazaar/forge
        library=["gs://.../forge.min.js"]
      )
      AS
    """
      var hmac = forge.hmac.create();
      hmac.start('sha256', secret);
      hmac.update(message);
      return hmac.digest().toHex();
    """;
    
    
    SELECT USER_HASH("test@gmail.com", "111");
    
    -- Row  f0_
    -- 1    172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031
    

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 2015-12-23
      • 2013-09-11
      • 1970-01-01
      • 2017-05-04
      • 2020-06-05
      • 1970-01-01
      • 2014-01-12
      • 2019-11-10
      相关资源
      最近更新 更多