From 89d650f913763a0550be93444c80d6f3d93139ec Mon Sep 17 00:00:00 2001 From: cyh Date: Thu, 10 Apr 2025 16:54:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E7=94=A8=E6=BA=90=E5=9F=9F=E5=90=8D?= =?UTF-8?q?=E8=84=B1=E6=95=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clash/view/adapter/DomainListAdapter.kt | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/yingmao/clash/view/adapter/DomainListAdapter.kt b/app/src/main/java/com/yingmao/clash/view/adapter/DomainListAdapter.kt index 2628f2c..b4a0c5b 100644 --- a/app/src/main/java/com/yingmao/clash/view/adapter/DomainListAdapter.kt +++ b/app/src/main/java/com/yingmao/clash/view/adapter/DomainListAdapter.kt @@ -26,7 +26,7 @@ class DomainListAdapter(layoutResId: Int) : var selectedPosition: Int = -1 - var addressIndex=1 + var addressIndex = 1 override fun convert(holder: BaseViewHolder, item: DomainItemBean) { val domainSelectedTv = holder.getView(R.id.domain_selected_tv) @@ -42,14 +42,46 @@ class DomainListAdapter(layoutResId: Int) : if (!TextUtils.isEmpty(item.address)) { var mmkv = MMKV.defaultMMKV() val fhost = mmkv.decodeString(BZYConstants.MMKV_KEY_FIRST_HOST, "") - var showAddress= item.address.replace(Regex("https://"), "") - if (item.address==fhost){ - showAddress+=" (推荐)" + var showAddress = item.address.replace(Regex("https://"), "") + // **脱敏处理** + showAddress = maskSensitiveInfo(showAddress) + + if (item.address == fhost) { + showAddress += " (推荐)" } - addressName.text =showAddress + addressName.text = showAddress } // addressName.text = "地址${addressIndex}" addressIndex++ } + private fun maskSensitiveInfo(address: String): String { + val parts = address.split(".") + + return if (parts.size > 2) { + // 处理中间部分,只脱敏每个部分的核心字符 + val maskedParts = parts.mapIndexed { index, part -> + if (index == 0 || index == parts.size - 1) { + part // 首尾部分不变 + } else { + maskMiddleCharacters(part) // 处理中间部分 + } + } + maskedParts.joinToString(".") // 重新组合成域名 + } else { + address // 只有两部分时不脱敏 + } + } + + private fun maskMiddleCharacters(text: String): String { + return when { + text.length > 2 -> { + val firstChar = text.first() + val lastChar = text.last() + val maskedMiddle = "*".repeat(text.length - 2) + "$firstChar$maskedMiddle$lastChar" + } + else -> "*".repeat(text.length) // 长度 ≤ 2 时,全替换为 * + } + } } \ No newline at end of file