os_datablock 组件是 OpenSecurity 提供的数据处理方块。它内置了一组本地数据处理回调,例如 Base64、压缩/解压、哈希、ROT13 和 BCrypt 工具,同时还会挂载一个名为 datablock 的内置文件系统环境。
- 仓库:
opensecurity - 组件名:
os_datablock - 常见宿主:放置在世界中的 OpenSecurity 数据块
local component = require("component")
local data = component.os_datablock
if not data then
error("未安装 os_datablock 组件")
end当它连接到某台电脑上下文时,该方块还会额外挂载一个名为 datablock 的内置文件系统环境。
有一部分字节数组类回调会共用同一套限制器:
- 硬上限:
Settings.get().dataCardHardLimit() - 软上限:
Settings.get().dataCardSoftLimit() - 当数据超过软上限但仍在允许范围内时,调用会暂停
Settings.get().dataCardTimeout()
这些受限回调的共同失败模式:
- 输入过大:
data size limit exceeded - 能量不足:
not enough energy
源码中使用的能量分组:
- complex 成本回调:
encode64decode64deflateinflate
- simple 成本回调:
sha256md5crc32
- 不经过限制器、也没有显式能耗判断的回调:
rot13bCryptHashbCryptCheck
- 语法:
data.greet() - 返回:
string - 用途:返回 OpenSecurity 内置问候语。
- 语法:
data.getLimit() - 返回:
number - 用途:返回所有受限制回调允许接受的硬字节上限。
- 语法:
data.encode64(input) - 返回:
string - 用途:对输入字节串进行 Base64 编码。
参数说明:
input:string|byte[]
行为说明:
- 返回值是包含 ASCII Base64 文本的字节字符串。
- 语法:
data.decode64(input) - 返回:
string - 用途:对输入字节串进行 Base64 解码。
参数说明:
input:string|byte[]
行为说明:
- 返回值是解码后的原始字节字符串。
- 语法:
data.deflate(input) - 返回:
string - 用途:使用 deflate 算法压缩输入字节串。
参数说明:
input:string|byte[]
- 语法:
data.inflate(input) - 返回:
string - 用途:对已 deflate 的字节串进行解压。
参数说明:
input:string|byte[]
- 语法:
data.sha256(input) - 返回:
string - 用途:计算 SHA-256 摘要。
参数说明:
input:string|byte[]
行为说明:
- 返回结果是二进制摘要,而不是十六进制文本。
- 语法:
data.md5(input) - 返回:
string - 用途:计算 MD5 摘要。
参数说明:
input:string|byte[]
行为说明:
- 返回结果是二进制摘要。
- 语法:
data.crc32(input) - 返回:
string - 用途:计算 CRC-32 摘要。
参数说明:
input:string|byte[]
行为说明:
- 返回结果是二进制摘要。
- 语法:
data.rot13(input) - 返回:
string - 用途:对 ASCII 字母应用 ROT13 变换。
参数说明:
input:string
行为说明:
- 只有
A-Z和a-z会被轮转。 - 其他字符保持不变。
- 语法:
data.bCryptHash(plaintext[, rounds]) - 返回:
string - 用途:计算 BCrypt 哈希字符串。
参数说明:
plaintext:stringrounds:number可选
行为说明:
- 默认 rounds 值为
10。 - 实现会把 rounds 限制在
4到15。 - 返回值是标准的 BCrypt 文本哈希。
- 语法:
data.bCryptCheck(plaintext, hash) - 返回:
boolean - 用途:用明文校验一个 BCrypt 哈希字符串。
参数说明:
plaintext:stringhash:string
local digest = data.sha256("hello")
local encoded = data.encode64("secret")
local compressed = data.deflate("compress me")
local hash = data.bCryptHash("password", 12)
print(#digest, encoded, data.bCryptCheck("password", hash))
print(data.rot13("uryyb jbeyq"))componentos_cardwriter