You need to enable JavaScript to run this app. 如何通过Firebase Cloud Function实现SHA-256/AES-256字符串加密
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Firebase Cloud Function实现SHA-256/AES-256字符串加密

Firebase Cloud Function 加密实现指引

前置概念澄清

首先需要明确两类算法的本质差异,避免场景错配:

  • SHA-256 是单向密码学哈希算法,不属于可逆加密范畴:处理后输出固定长度的哈希值,无法通过哈希值反向推导出原始字符串,仅适用于数据完整性校验、不可逆存储凭证类场景。
  • AES-256 是标准对称加密算法:输出的密文可通过持有正确密钥的流程解密还原为原始字符串,属于真正意义上的可逆加密,适用于需要后续还原敏感内容的存储、传输场景。

SHA-256 哈希实现

Firebase Cloud Function 运行在 Node.js 环境,内置crypto模块,无需安装任何第三方依赖即可完成计算:

const functions = require("firebase-functions");
const crypto = require("crypto");

exports.myfunction = functions.https.onCall((data, context) => {  
  const someString = "Hello World!";
  // 计算SHA-256哈希,输出为十六进制格式字符串
  const encryptedString = crypto.createHash("sha256")
    .update(someString, "utf8")
    .digest("hex");

  return {
    result: encryptedString
  };
});

如果需要提升哈希的抗碰撞强度,可在update方法的输入中拼接预先存储的固定盐值,避免彩虹表破解。


AES-256 可逆加密实现

AES-256 加密流程需要满足几个硬性要求:密钥长度必须为32字节(对应256位长度)、每次加密生成独立的随机初始向量、推荐使用带完整性校验的aes-256-gcm加密模式,同样基于内置crypto模块实现即可:

const functions = require("firebase-functions");
const crypto = require("crypto");

// 从云函数环境变量读取配置好的32字节AES密钥,禁止硬编码在代码中
const AES_SECRET_KEY = Buffer.from(functions.config().aes.secret_key, "utf8");

exports.myfunction = functions.https.onCall((data, context) => {  
  const someString = "Hello World!";
  // 每次加密生成12字节随机初始向量(AES-GCM模式的最优推荐长度)
  const initVector = crypto.randomBytes(12);
  // 初始化加密实例
  const cipher = crypto.createCipheriv("aes-256-gcm", AES_SECRET_KEY, initVector);
  // 逐段更新加密内容,输出base64格式密文
  let ciphertext = cipher.update(someString, "utf8", "base64");
  ciphertext += cipher.final("base64");
  // 获取加密生成的认证标签,解密时需用于校验数据是否被篡改
  const authTag = cipher.getAuthTag().toString("base64");

  // 密文需同时携带初始向量和认证标签,否则无法正常解密
  const encryptedString = {
    ciphertext: ciphertext,
    initVector: initVector.toString("base64"),
    authTag: authTag
  };

  return encryptedString;
});

实现注意事项

  • AES 密钥严禁硬编码在云函数代码中,必须通过云函数的环境变量配置存储,避免代码仓库泄露导致密钥外泄。
  • 可调用云函数的返回值必须可被JSON序列化,不要直接返回原始Buffer类型,统一转换为base64格式进行传输和存储。
  • 如果业务场景需要还原原始字符串,绝对不能选择SHA-256实现,必须使用AES这类支持解密的对称加密算法。

内容的提问来源于stack exchange,提问作者mcd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 23:45:03