360 Secure SkillHub
360 安全技能中心

量子加密

通过 Node.js 插件与 KMS 交互,提供文本和文件的分块量子安全加解密能力,支持四种 SM4 模式,并可在分块间复用会话密钥;使用前需填写配置文件中的 KMS 凭据并先完成初始化。声明的 WASM 加密模块未出现在文件清单中。

herbliu
herbliu
热度 16.02
最近更新 2026-04-09 12:01:07
分类:安全依赖:代码执行 / 读写文件 / 第三方 API应用场景:API 集成 / 数据处理

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add quantum-encryption
Metadata
name
openclaw-crypto
description
量子加密 Quantum-safe encryption and decryption plugin for Node.js. Use when the user needs to encrypt/decrypt data or files with quantum-safe cryptography, integrate KMS key management, or work with the OpenClaw quantum crypto SDK.

OpenClaw Quantum-Safe Crypto Skill

Overview

This skill provides quantum-safe data and file encryption/decryption capabilities via the OpenClaw plugin (quantum_crypto.cjs).

Setup

  1. Copy the entire skill/ directory to the target project
  2. Fill in quantum.json with valid credentials
  3. Use require('./skill/quantum_crypto.cjs') to load the plugin

API

init() - Initialize

Must be called first. Resolves KMS address, pulls fill-keys, logs into KMS.

encrypt(plainText, mode) -> { cipherText, keyId }

Encrypt a string.

decrypt(cipherText, keyId, mode) -> { plainText }

Decrypt a string.

encryptFile(fileData, mode, opts?) -> { fileBuffer, keyId, sessionKey, fillKey }

Encrypt a file Buffer. Pass { keyId, sessionKey, fillKey } from previous call to reuse session key across chunks.

decryptFile(fileData, keyId, mode, opts?) -> { fileBuffer, sessionKey, fillKey }

Decrypt a file Buffer. Pass { sessionKey, fillKey } from previous call to reuse keys across chunks.

Encryption Modes

Mode Algorithm
1 SM4_ECB_NOPADDING
2 SM4_ECB_PKCS7PADDING
3 SM4_CBC_NOPADDING
4 SM4_CBC_PKCS7PADDING

Usage Example

const qsEncryptPlug = require('./skill/quantum_crypto.cjs');

// Initialize
await qsEncryptPlug.init();

// String encrypt/decrypt
const { cipherText, keyId } = await qsEncryptPlug.encrypt('Hello', 2);
const { plainText } = await qsEncryptPlug.decrypt(cipherText, keyId, 2);

// File encrypt (chunked, 10MB per chunk)
const CHUNK = 10 * 1024 * 1024;
let sessionKey, fillKey, keyId;
for (let i = 0; i < fileSize; i += CHUNK) {
  const chunk = readChunk(filePath, i, CHUNK);
  const r = await qsEncryptPlug.encryptFile(chunk, 1, { keyId, sessionKey, fillKey });
  keyId = r.keyId; sessionKey = r.sessionKey; fillKey = r.fillKey;
  writeChunk(r.fileBuffer, outStream);
}

// File decrypt (10MB + 16 per chunk)
const D_CHUNK = CHUNK + 16;
let dSk, dFk;
for (let i = 0; i < encFileSize; i += D_CHUNK) {
  const chunk = readChunk(encPath, i, D_CHUNK);
  const r = await qsEncryptPlug.decryptFile(chunk, keyId, 1, { sessionKey: dSk, fillKey: dFk });
  dSk = r.sessionKey; dFk = r.fillKey;
  writeChunk(r.fileBuffer, outStream);
}

File Structure

skill/
├── quantum_crypto.cjs   # Plugin (minified)
├── libqss_common.wasm   # WASM crypto module
├── quantum.json         # Configuration (fill before use)
├── SKILL.md             # Qoder skill definition
└── README.md            # Usage documentation