高级加密机

基本信息

属性 值
注册名 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

相关条目