高级加密机
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | computronics:cipher_advanced |
| 方块类 | pl.asie.computronics.block.BlockCipherAdvanced |
| TileEntity | pl.asie.computronics.tile.TileCipherBlockAdvanced |
| 文档名 | cipher_advanced(BlockCipherAdvanced.java:30) |
| 材质 | computronics:advanced/machine_side / machine_top / machine_bottom / cipher_front(BlockCipherAdvanced.java:41-46) |
| 多渲染通道 | 否,hasSubTypes() 返回 false(BlockCipherAdvanced.java:48-51) |
| 提示文本 | tooltip.computronics.cipher.advanced(BlockCipherAdvanced.java:53-57) |
| 创造标签 | tabComputronics(继承自 BlockPeripheral.java:29) |
| 开启配置 | enable.cipher_advanced,默认 true(Computronics.java:264) |
| 实现 | IBlockWithSpecialText(BlockCipherAdvanced.java:25) |
功能
在加密机的 AES 之外,额外提供真正的非对称密码学:生成 RSA 密钥对,公钥加密 / 私钥解密。
密钥生成是纯 Java 手工实现,不经 JCE 密钥生成器:使用 java.security.KeyPairGenerator + RSAPublicKeySpec(n, d) / RSAPrivateKeySpec(n, e) 还原(TileCipherBlockAdvanced.java:149、TileCipherBlockAdvanced.java:174)。大数计算放在 pl.asie.computronics.util.cipher.RSACalculationTask,由专属线程池执行——Executors.newFixedThreadPool(2, ...MIN_PRIORITY...)(Computronics.java:267-268),让模幂运算不阻塞主线程。
密钥以 Map<Integer, String> 形式存于 RSAValue.publicKey / privateKey,可序列化进 NBT(RSAValue.java:29、RSAValue.java:150-170),并暴露为 OC Lua 的 table 类型值。
外设方法:
| 方法 | 签名 | 来源 |
|---|---|---|
createRandomKeySet |
function([keylength:number]):keygen,由两个随机素数生成密钥生成器,消耗 CIPHER_KEY_CONSUMPTION |
TileCipherBlockAdvanced.java:181、TileCipherBlockAdvanced.java:186-198 |
createKeySet |
function(num1:number, num2:number):keygen,由给定的两个素数生成,消耗 CIPHER_KEY_CONSUMPTION |
TileCipherBlockAdvanced.java:203、TileCipherBlockAdvanced.java:208-211 |
encrypt |
function(message:string, publicKey:table):string |
TileCipherBlockAdvanced.java:215 |
decrypt |
function(message:string, privateKey:table):string |
TileCipherBlockAdvanced.java:226 |
| — | 传入无有效 RSA 密钥时抛 IllegalArgumentException: bad argument #%s (no valid RSA key) |
TileCipherBlockAdvanced.java:107 |
方法名数组为 createRandomKeySet / createKeySet / encrypt / decrypt,共 4 个(TileCipherBlockAdvanced.java:269-270)。
⚠️ 该方块仅在加载 OpenComputers 时才有意义:CIPHER_ENERGY_STORAGE / CIPHER_KEY_CONSUMPTION / CIPHER_WORK_CONSUMPTION 三个配置项都在 Config.preInit() 的 if (Mods.isLoaded(Mods.OpenComputers)) 分支内赋值(Config.java:153-178)。字段虽有初始值,但从不从配置文件读取;没有 OC 时配方里的材料 oc:capacitor 也不存在。
数值
| 数值名 | 值 | 范围 | 来源 |
|---|---|---|---|
power.cipherEnergyStorage |
16000 RF | 0–100000 | Config.java:155-162 |
power.cipherKeyConsumption |
16000 RF | 0–100000 | Config.java:163-170 |
power.cipherWorkConsumption |
160 RF | 0–100000 | Config.java:171-178 |
| RSA 计算线程数 | 2(MIN_PRIORITY) |
— | Computronics.java:267-268 |
上表三个值是配置默认值。字段声明处的初值(
Config.java:26-28:1600.0 / 1600.0 / 16.0)比配置默认值小 10 倍,仅在没有 OpenComputers 时才实际生效。 每次加解密的基础能耗为CIPHER_WORK_CONSUMPTION+2 × 消息字符数(Config.java:178注释)。 所有power.*项在读入后经EnergyConverter.convertEnergy(v, "RF", "OC")换算(Config.java:102-104),配置中统一以 RF 为单位(Config.java:473-475)。
交互
| 触发 | 行为 |
|---|---|
| 外部 | 无独立 GUI;全部操作经外设方法 |
| 能量 | 每次密钥生成/加解密通过 tryConsumeEnergy 扣电 |
合成配方
无 OC 配方(ModRecipes.java:169-185):
gdg
gcg
eie
| 字符 | 物品 |
|---|---|
g |
金锭 ingotGold |
c |
加密机(未启用时回退为 gemDiamond) |
d |
钻石(未启用加密机时回退为 ingotGold) |
e |
末影珍珠 minecraft:ender_pearl |
i |
铁锭 ingotIron |
OC 配方(ModRecipes.java:456-472):
gdg
mcm
gbg
| 字符 | 物品 |
|---|---|
g |
金锭 ingotGold |
d |
oc:cpu2(未启用加密机时回退为 gemDiamond) |
m |
oc:circuitChip2 |
c |
加密机(未启用时回退为 oc:cpu2) |
b |
oc:capacitor |
相关条目
- 加密机 - 对称加密版本
- 设置:OpenComputers - 三个能耗项均在 OC 分支内