首页
/ CipherStash Protect.js 入门指南:数据加密与搜索实战

CipherStash Protect.js 入门指南:数据加密与搜索实战

2025-06-05 03:35:30作者:裴锟轩Denise

前言

在现代应用开发中,数据安全至关重要。CipherStash Protect.js 是一个强大的 JavaScript 库,它允许开发者在 Node.js 应用中轻松实现数据加密、解密和搜索功能,同时保持数据在数据库中的可查询性。本文将带你从零开始,逐步掌握 Protect.js 的核心功能。

环境准备

在开始之前,请确保你的开发环境满足以下要求:

  1. Node.js 环境(建议使用 LTS 版本)
  2. TypeScript 编译器
  3. PostgreSQL 数据库(版本 12 或更高)

项目结构规划

一个典型的 Protect.js 项目结构如下:

项目根目录/
├── src/
│   ├── protect/
│   │  ├── index.ts    # Protect 客户端配置
│   │  └── schema.ts   # 数据表定义
│   └── index.ts       # 应用入口
├── .env               # 环境变量
├── cipherstash.toml   # 配置文件
├── cipherstash.secret.toml # 密钥文件
├── package.json
└── tsconfig.json

安装与配置

1. 安装 Protect.js

使用 npm 或 yarn 安装核心包:

npm install @cipherstash/protect

同时需要安装 CipherStash CLI 工具:

  • macOS 用户:
    brew install cipherstash/tap/stash
    
  • Linux 用户需下载对应平台的二进制文件并添加到 PATH

2. 初始化配置

运行以下命令生成必要的配置文件:

stash setup

此命令会创建两个关键文件:

  • cipherstash.toml:公共配置
  • cipherstash.secret.toml:包含敏感凭证(切勿提交到版本控制)

数据模型定义

3. 创建数据模式

src/protect/schema.ts 中定义你的数据表结构:

import { csTable, csColumn } from "@cipherstash/protect";

export const users = csTable("users", {
  email: csColumn("email").freeTextSearch().equality().orderAndRange(),
});

export const orders = csTable("orders", {
  address: csColumn("address"),
});

这里我们为 email 字段添加了三种搜索能力:

  • 全文搜索 (freeTextSearch)
  • 精确匹配 (equality)
  • 排序和范围查询 (orderAndRange)

客户端初始化

4. 创建 Protect 客户端

src/protect/index.ts 中初始化客户端:

import { protect } from "@cipherstash/protect";
import { users, orders } from "./schema";

export const protectClient = await protect({
  schemas: [users, orders],
});

核心功能实现

5. 数据加密

使用 encrypt 方法加密敏感数据:

const encryptResult = await protectClient.encrypt("user@example.com", {
  column: users.email,
  table: users,
});

if (encryptResult.failure) {
  console.error("加密失败:", encryptResult.failure.message);
  return;
}

const ciphertext = encryptResult.data;

加密结果是一个包含密文的对象,可以安全地存储到数据库中。

6. 数据解密

使用 decrypt 方法解密数据:

const decryptResult = await protectClient.decrypt(ciphertext);

if (decryptResult.failure) {
  console.error("解密失败:", decryptResult.failure.message);
  return;
}

const plaintext = decryptResult.data; // "user@example.com"

7. 数据库集成

在 PostgreSQL 中创建表时,加密字段应使用 jsonb 类型:

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  email jsonb NOT NULL
);

这样设计允许存储 Protect.js 生成的加密数据结构,同时保持搜索能力。

高级功能

批量加密操作

对于大量数据,Protect.js 提供了批量加密接口:

const batchEncryptResult = await protectClient.batchEncrypt([
  { plaintext: "data1", column: users.email, table: users },
  { plaintext: "data2", column: users.email, table: users }
]);

搜索加密数据

由于我们在模式定义中添加了搜索能力,可以直接查询加密数据:

const searchResult = await protectClient.search(users.email, "example");

最佳实践

  1. 密钥管理:确保 cipherstash.secret.toml 不被泄露,建议使用密钥管理服务
  2. 错误处理:始终检查加密/解密操作的返回结果
  3. 性能优化:对于高频操作,考虑缓存 Protect 客户端实例
  4. 类型安全:充分利用 TypeScript 的类型检查功能

结语

通过本指南,你已经掌握了 CipherStash Protect.js 的核心功能。这个强大的工具让数据加密变得简单而高效,同时不牺牲搜索能力。在实际项目中,你可以根据需求扩展数据模型,实现更复杂的安全数据管理方案。

对于更高级的用法,建议探索 Protect.js 的文档,了解如何实现字段级加密、细粒度访问控制等高级安全特性。

登录后查看全文
热门项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
162
2.05 K
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
146
191
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
60
16
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
198
279
apintoapinto
基于golang开发的网关。具有各种插件,可以自行扩展,即插即用。此外,它可以快速帮助企业管理API服务,提高API服务的稳定性和安全性。
Go
22
0
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
950
557
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
96
15
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
346
1.33 K