<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/feed.xsl"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>HUANREN</title>
        <link>https://huanren.dedyn.io/</link>
        <description>一个现代化的内容管理系统</description>
        <lastBuildDate>Sat, 06 Jun 2026 04:01:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>NeutralPress</generator>
        <language>zh-CN</language>
        <image>
            <title>HUANREN</title>
            <url>https://huanren.dedyn.io//icon/512x</url>
            <link>https://huanren.dedyn.io/</link>
        </image>
        <copyright>All rights reserved 2026, EntroHack</copyright>
        <atom:link href="https://huanren.dedyn.io//feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[OfflineAuth — 离线模式防伪身份验证 Mod]]></title>
            <link>https://huanren.dedyn.io//posts/offlineauth-li-xian-mo-shi-fang-wei-shen-fen-yan-zheng-mod</link>
            <guid isPermaLink="false">https://huanren.dedyn.io//posts/offlineauth-li-xian-mo-shi-fang-wei-shen-fen-yan-zheng-mod</guid>
            <pubDate>Sat, 06 Jun 2026 04:01:13 GMT</pubDate>
            <content:encoded><![CDATA[<h1 id="offlineauth--离线模式防伪身份验证-mod">OfflineAuth — 离线模式防伪身份验证 Mod</h1>
<blockquote>
<p><strong>版本:</strong> 1.0.1</p>
</blockquote>
<blockquote>
<p><strong>支持:</strong> Minecraft 1.21 + Fabric</p>
</blockquote>
<blockquote>
<p><strong>简介:</strong> 防止离线模式下玩家冒名顶替，使用 EdDSA (Ed25519) 签名验证。</p>
</blockquote>
<hr>
<h2 id="目录">目录</h2>
<ul>
<li>
<p><a href="#%E6%A6%82%E8%BF%B0">概述</a></p>
</li>
<li>
<p><a href="#%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86">工作原理</a></p>
</li>
<li>
<p><a href="#%E5%AE%89%E8%A3%85">安装</a></p>
</li>
<li>
<p><a href="#%E9%85%8D%E7%BD%AE">配置</a></p>
</li>
<li>
<p><a href="#%E5%AF%86%E9%92%A5%E7%AE%A1%E7%90%86">密钥管理</a></p>
</li>
<li>
<p><a href="#%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B">快速上手</a></p>
</li>
<li>
<p><a href="#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98">常见问题</a></p>
</li>
<li>
<p><a href="#%E6%8A%80%E6%9C%AF%E8%AF%B4%E6%98%8E">技术说明</a></p>
</li>
<li>
<p><a href="#%E8%AE%B8%E5%8F%AF%E8%AF%81">许可证</a></p>
</li>
</ul>
<hr>
<h2 id="概述">概述</h2>
<p>Minecraft 默认的离线模式 <code>online-mode=false</code>) 允许任何玩家以任意用户名进入服务器，这使得<strong>冒名顶替</strong>极其容易。</p>
<p><strong>OfflineAuth</strong> 通过<strong>挑战-签名-验证</strong>机制，让每个玩家拥有唯一的 EdDSA 密钥对：</p>
<ul>
<li>
<p><strong>服务端</strong>保存一个 <code>玩家名 → 公钥</code> 的映射表</p>
</li>
<li>
<p><strong>客户端</strong>持有私钥，用来证明自己的身份</p>
</li>
<li>
<p>登录时服务端发送随机挑战，客户端签名后返回，服务端用公钥验签</p>
</li>
</ul>
<p>只有持有对应私钥的玩家才能以该用户名登录，彻底杜绝改名冒充。</p>
<hr>
<h2 id="工作原理">工作原理</h2>
<pre><code>
服务端                             客户端

  │                                  │

  │  ── 客户端尝试登录 ──→            │

  │                                  │

  │  1. 服务端查找该玩家名的公钥       │

  │     · 找到 → 继续                │

  │     · 未找到 → 踢出："未注册的玩家" │

  │                                  │

  │  2. 服务端生成 32 字节随机挑战     │

  │     ── 发送挑战 ──→              │

  │                                  │

  │  3.                      客户端用私钥签名挑战

  │                                  │

  │     ←── 返回签名 ──              │

  │                                  │

  │  4. 服务端用公钥验签              │

  │     · 验证通过 → 允许登录         │

  │     · 验证失败 → 踢出："身份验证失败"│

  │                                  │

</code></pre>
<hr>
<h2 id="安装">安装</h2>
<h3 id="服务端">服务端</h3>
<ol>
<li>
<p>将 <code>offlineauth-1.0.1.jar</code> 放入服务端的 <code>mods/</code> 目录</p>
</li>
<li>
<p>确保服务端安装了 <strong>Fabric Loader ≥0.15.0</strong> 和 <strong>Fabric API</strong></p>
</li>
<li>
<p>启动服务端</p>
</li>
<li>
<p>首次启动会自动生成示例配置文件 <code>config/auth_keys.json</code></p>
</li>
<li>
<p>按下方 <a href="#%E9%85%8D%E7%BD%AE">配置</a> 步骤添加玩家公钥</p>
</li>
</ol>
<h3 id="客户端">客户端</h3>
<ol>
<li>
<p>将 <code>offlineauth-1.0.1.jar</code> 放入客户端的 <code>mods/</code> 目录</p>
</li>
<li>
<p>确保客户端安装了 <strong>Fabric Loader ≥0.15.0</strong> 和 <strong>Fabric API</strong></p>
</li>
<li>
<p>将你的私钥文件 <code>private_key.pem</code> 放入客户端的 <code>config/</code> 目录</p>
</li>
<li>
<p>启动游戏</p>
</li>
</ol>
<blockquote>
<p><strong>提示:</strong> 服务端和客户端都需要安装此模组，但 jar 是同一个文件。</p>
</blockquote>
<hr>
<h2 id="配置">配置</h2>
<h3 id="服务端配置">服务端配置</h3>
<p><strong>文件:</strong> <code>config/auth_keys.json</code></p>
<pre><code class="language-json">
{

  "玩家名1": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...\n-----END PUBLIC KEY-----",

  "玩家名2": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...\n-----END PUBLIC KEY-----"

}

</code></pre>
<ul>
<li>
<p>每个玩家一行，键是玩家的<strong>游戏名</strong>，值是 PEM 格式的<strong>公钥</strong></p>
</li>
<li>
<p>玩家改名后需要同步更新此文件</p>
</li>
</ul>
<h3 id="客户端配置">客户端配置</h3>
<p><strong>文件:</strong> <code>config/private_key.pem</code></p>
<pre><code>
-----BEGIN PRIVATE KEY-----

MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQ...

-----END PRIVATE KEY-----

</code></pre>
<ul>
<li>
<p>客户端只需要私钥文件</p>
</li>
<li>
<p><strong>私钥绝不能外泄</strong>——持有私钥的人就可以以你的身份登录</p>
</li>
</ul>
<hr>
<h2 id="密钥管理">密钥管理</h2>
<h3 id="生成密钥对">生成密钥对</h3>
<p>使用项目提供的 <code>GenKeys.java</code> 生成：</p>
<pre><code class="language-bash">
javac [GenKeys.java](http://GenKeys.java) &#x26;&#x26; java GenKeys

</code></pre>
<p>会输出两个文件：</p>
<p>| 文件 | 说明 | 存放位置 |</p>
<p>|------|------|---------|</p>
<p>| <code>private_key.pem</code> | <strong>私钥</strong> | 客户端 <code>config/</code> |</p>
<p>| <code>public_key.pem</code>  | 公钥 | 发给服务器管理员 |</p>
<h3 id="跨服务器使用">跨服务器使用</h3>
<ul>
<li>
<p>你的 <strong>私钥只需保存一份</strong>，可以进入任意多个已添加对应公钥的服务器</p>
</li>
<li>
<p>每进入一个新服务器，都需要将 <strong>公钥</strong> 发给该服务器的管理员</p>
</li>
<li>
<p>管理员将公钥添加进该服务器的 <code>config/auth_keys.json</code> 后，你即可进入</p>
</li>
</ul>
<blockquote>
<p><strong>模组没有中央认证服务器</strong>，公钥分发需要玩家自行与服主沟通。</p>
</blockquote>
<hr>
<h2 id="快速上手">快速上手</h2>
<h3 id="对于玩家">对于玩家</h3>
<pre><code class="language-bash">
# 1. 生成密钥对

javac [GenKeys.java](http://GenKeys.java) &#x26;&#x26; java GenKeys

# → 得到 private_key.pem（自用）和 public_key.pem（给服主）

# 2. 将 private_key.pem 放入客户端 config/ 目录

# 3. 将 public_key.pem 发给想进的每个服务器管理员

</code></pre>
<h3 id="对于服务器管理员">对于服务器管理员</h3>
<pre><code class="language-bash">
# 1. 将 mod jar 放入服务端 mods/

# 2. 启动服务端，生成 config/auth_keys.json

# 3. 从玩家处获取公钥，按格式写入 auth_keys.json

# 4. 重启服务端或执行 /reload（需要其他插件支持）

</code></pre>
<hr>
<h2 id="常见问题">常见问题</h2>
<h3 id="q-玩家进入服务器时被踢出未注册的玩家">Q: 玩家进入服务器时被踢出"未注册的玩家"</h3>
<p><strong>A:</strong> 该玩家的用户名没有在服务端 <code>auth_keys.json</code> 中配置，需要联系管理员添加。</p>
<h3 id="q-玩家被踢出身份验证失败签名错误">Q: 玩家被踢出"身份验证失败（签名错误）"</h3>
<p><strong>A:</strong> 通常意味着：</p>
<ul>
<li>
<p>客户端使用的私钥与服务端记录的公钥<strong>不匹配</strong></p>
</li>
<li>
<p>玩家可能更换了密钥对但没有更新服务端配置</p>
</li>
</ul>
<h3 id="q-玩家改名了怎么办">Q: 玩家改名了怎么办？</h3>
<p><strong>A:</strong> 在服务端 <code>config/auth_keys.json</code> 中，将玩家名改为新名字即可。公钥可以复用。</p>
<h3 id="q-是否需要重启服务端才能生效">Q: 是否需要重启服务端才能生效？</h3>
<p><strong>A:</strong> 模组在服务端启动时加载配置。如果运行时修改，需要重启。</p>
<h3 id="q-支持哪些-minecraft-版本">Q: 支持哪些 Minecraft 版本？</h3>
<p><strong>A:</strong> 当前版本基于 1.21 编译。1.21.x 小版本需要重新编译（改 <code>build.gradle</code> 版本号）。</p>
<hr>
<h2 id="技术说明">技术说明</h2>
<ul>
<li>
<p><strong>加密算法:</strong> EdDSA (Ed25519)，JDK 标准 <code>KeyPairGenerator.getInstance("EdDSA")</code></p>
</li>
<li>
<p><strong>挑战长度:</strong> 32 字节（256 位），使用 <code>SecureRandom</code> 生成</p>
</li>
<li>
<p><strong>反射兼容:</strong> 服务端通过遍历 <code>ServerLoginNetworkHandler</code> 的声明字段，按类型 <code>String</code> + 非 static + 非 final + 非 private 自动匹配玩家名字段，兼容所有映射版本</p>
</li>
<li>
<p><strong>网络通信:</strong> 使用 Fabric API 的 <code>ServerLoginNetworking</code> / <code>ClientLoginNetworking</code>，包 ID 统一使用 <code>offlineauth:challenge</code></p>
</li>
</ul>
<h3 id="构建">构建</h3>
<pre><code class="language-bash">
# 需要: JDK 21+, Gradle 8.8+

cd OfflineAuthMod

gradle build

# 输出: build/libs/offlineauth-&#x3C;version>.jar

</code></pre>
<hr>
<h2 id="许可证">许可证</h2>
<p>MIT License — 随意使用、修改和分发。</p>
<hr>
<p><em>OfflineAuth — 让离线模式不再裸奔。</em></p>]]></content:encoded>
            <author>entrohack</author>
            <contentPreview><![CDATA[OfflineAuth — 离线模式防伪身份验证 Mod 版本: 1.0.1 支持: Minecraft 1.21 + Fabric 简介: 防止离线模式下玩家冒名顶替，使用 EdDSA (Ed25519) 签名验证。 目录 概述 工作原理 安装 配置 密钥管理 快速上手 常见问题 技术说明 许可证 概述 Minecraft 默认的离线模式 online-mode=false ) 允许任何玩家以任意用户名进入服务器，这使得 冒名顶替 极...]]></contentPreview>
        </item>
        <item>
            <title><![CDATA[我的世界 1.21 Java Fabric 服务器正式介绍]]></title>
            <link>https://huanren.dedyn.io//posts/myminecraftserver</link>
            <guid isPermaLink="false">https://huanren.dedyn.io//posts/myminecraftserver</guid>
            <pubDate>Sat, 11 Apr 2026 10:10:26 GMT</pubDate>
            <content:encoded><![CDATA[<h1 id="我的世界-121-java-fabric-服务器正式介绍">我的世界 1.21 Java Fabric 服务器正式介绍</h1>
<h1 id="我的世界-121-java-fabric-服务器正式介绍-1">我的世界 1.21 Java Fabric 服务器正式介绍</h1>
<h2 id="服务器概况">服务器概况</h2>
<ul>
<li><strong>游戏版本</strong>：Minecraft Java Edition 1.21</li>
<li><strong>服务端类型</strong>：Fabric</li>
<li><strong>服务器性质</strong>：稳定、公平、长期运营的社区生存服务器</li>
<li><strong>接入方式</strong>：正版/离线可进</li>
</ul>
<h2 id="服务器规则">服务器规则</h2>
<p>本服务器采用极简规则体系，仅对严重影响服务器稳定性与他人正常游戏体验的行为予以禁止。所有玩家默认同意并遵守以下规则：</p>
<ol>
<li><strong>禁止建造卡服机</strong><br>
包括但不限于：高频红石电路、大规模实体堆积、无限制的区块加载器、异常刷物品装置等任何导致服务器TPS下降、卡顿或崩溃的行为。</li>
<li><strong>禁止偷窃与破坏</strong><br>
未经他人明确许可，不得取用、移动、破坏其他玩家放置的任何物品、建筑、容器或机械装置。</li>
<li><strong>禁止恶意影响他人体验</strong><br>
不得进行恶意PVP（非约定情况下）、围堵他人建筑、言语辱骂、骚扰、利用漏洞恶意干扰他人正常游戏等行为。</li>
</ol>
<h2 id="用户协议">用户协议</h2>
<p>在进入本服务器游玩之前，请仔细阅读以下协议。您一旦连接至服务器，即视为无条件接受本协议全部条款。</p>
<h3 id="第一条-账号与行为责任">第一条 账号与行为责任</h3>
<p>1.1 您应对自己使用的Minecraft账号及角色在服务器内的一切行为负责。</p>
<p>1.2 禁止使用任何外挂、作弊模组、透视材质包或利用游戏漏洞获取不当利益。</p>
<p>1.3 严禁散布恶意软件、钓鱼链接或进行任何形式的网络攻击行为。</p>
<h3 id="第二条-违规处理">第二条 违规处理</h3>
<p>2.1 服务器管理团队拥有对违规行为的最终裁定权。</p>
<p>2.2 视违规情节轻重，管理团队可采取：警告、临时封禁、永久封禁、回滚/清除违规区域、没收非法所得等措施。</p>
<p>2.3 对于建造卡服机、偷窃、恶意破坏等严重违规行为，一律从重处理（永久封禁 + 区块回滚），不予提前解封。</p>
<h3 id="第三条-服务器稳定性免责">第三条 服务器稳定性免责</h3>
<p>3.1 服务器会尽力保证稳定运行，但不对因机房故障、网络中断、游戏版本更新、插件/模组冲突等原因导致的数据丢失、回档或无法连接承担责任。</p>
<p>3.2 建议玩家定期备份自己的建筑进度（如使用结构方块或手动记录）。</p>
<h3 id="第四条-隐私与数据">第四条 隐私与数据</h3>
<p>4.1 服务器可能记录玩家登录IP、行为日志等必要数据，仅用于排查违规行为与性能问题，不会向第三方提供。</p>
<p>4.2 日志数据保留期限不超过违规追溯期（一般为30天）。</p>
<h3 id="第五条-协议修改">第五条 协议修改</h3>
<p>5.1 服务器保留随时修改本协议的权利。修改后的协议将在服务器公告频道（如QQ群/ Discord / 游戏内公告）发布，继续游戏即视为接受修改。</p>
<h2 id="服务器地址">服务器地址</h2>
<pre><code>play.simpfun.cn:40961
</code></pre>
<h2 id="qq群号">QQ群号</h2>
<pre><code>963904234
</code></pre>]]></content:encoded>
            <author>entrohack</author>
            <contentPreview><![CDATA[我的世界 1.21 Java Fabric 服务器正式介绍 我的世界 1.21 Java Fabric 服务器正式介绍 服务器概况 游戏版本 ：Minecraft Java Edition 1.21 服务端类型 ：Fabric 服务器性质 ：稳定、公平、长期运营的社区生存服务器 接入方式 ：正版/离线可进 服务器规则 本服务器采用极简规则体系，仅对严重影响服务器稳定性与他人正常游戏体验的行为予以禁止。所有玩家默认同意并遵守以下规则： 禁...]]></contentPreview>
        </item>
    </channel>
</rss>