Administrator il y a 2 mois
Parent
commit
557568dd8c

+ 20 - 0
src/main/kotlin/cn/qqck/kotlin/tools/Base64.kt

@@ -1,4 +1,24 @@
 package cn.qqck.kotlin.tools
 
+/**
+ * 将当前字节数组编码为Base64格式的字符串表示。
+ *
+ * @return 转换后的Base64格式字符串。如果字节数组为空,则返回空字符串。
+ */
 fun ByteArray.base64(): String = java.util.Base64.getEncoder().encodeToString(this)
+private val withoutPadding = java.util.Base64.getEncoder().withoutPadding()
+
+/**
+ * 将当前字节数组编码为Base64格式的字符串表示,并可以选择是否移除末尾的填充字符。
+ *
+ * @param without 指定是否移除Base64编码结果中末尾的填充字符。如果为true,则移除填充字符;否则保留。
+ * @return 转换后的Base64格式字符串。如果字节数组为空,则返回空字符串。
+ */
+fun ByteArray.base64(without: Boolean): String = if (without) withoutPadding.encodeToString(this) else this.base64()
+
+/**
+ * 将字符串进行Base64解码并返回对应的字节数组。
+ *
+ * @return 解码后的字节数组。如果输入字符串的格式不正确,将可能引发异常。
+ */
 fun String.base64(): ByteArray = java.util.Base64.getDecoder().decode(this)

+ 14 - 0
src/main/kotlin/cn/qqck/kotlin/tools/ByteArray.kt

@@ -74,6 +74,20 @@ fun ByteArray.xor(key: ByteArray): ByteArray {
     return ByteArray(size) { j_i -> (this[j_i].toInt() xor key[j_i % j_keysize].toInt()).toByte() }
 }
 
+/**
+ * 使用指定的密钥对当前字节数组执行逐字节的 XOR 操作。
+ * 如果当前字节数组或密钥为空,则不会进行任何操作并直接返回当前字节数组。
+ *
+ * @param key 用于执行 XOR 操作的密钥字节数组。密钥将按其长度循环用于操作。
+ * @return 经过 XOR 操作后的当前字节数组。操作是在当前数组上就地进行。
+ */
+fun ByteArray.xorc(key: ByteArray): ByteArray {
+    if (this.isEmpty() || key.isEmpty()) return this
+    val j_keysize = key.size
+    for (j_i in this.indices) this[j_i] = (this[j_i].toInt() xor key[j_i % j_keysize].toInt()).toByte()
+    return this
+}
+
 /**
  * 将字节数组的指定位置转换为短整型(Short)。
  *

+ 13 - 0
src/main/kotlin/cn/qqck/kotlin/tools/Json.kt

@@ -1,9 +1,22 @@
 package cn.qqck.kotlin.tools
 
+/**
+ * 将当前字节数组转换为 `JsonValue` 对象。
+ * 该方法首先将字节数组解码为字符串,然后尝试解析为 `JsonValue`。
+ *
+ * @return 一个表示 JSON 数据结构的 `JsonValue` 对象。
+ */
 fun ByteArray.json(): dev.botta.json.values.JsonValue {
     return this.string().json()
 }
 
+/**
+ * 将当前字符串解析为一个 `JsonValue` 对象。
+ * 如果解析失败,则返回一个空的 `JsonObject`。
+ *
+ * @return 如果字符串可以被成功解析为 JSON,则返回对应的 `JsonValue` 实例;
+ *         如果发生解析异常,则返回一个空的 `JsonObject` 实例。
+ */
 fun String.json(): dev.botta.json.values.JsonValue {
     return try {
         dev.botta.json.Json.parse(this)

+ 10 - 0
src/main/kotlin/cn/qqck/kotlin/tools/KeyStore.kt

@@ -6,6 +6,16 @@ import java.security.cert.CertificateFactory
 import java.security.spec.PKCS8EncodedKeySpec
 
 object KeyStore {
+    /**
+     * 将给定的PEM格式证书和私钥转换为KeyStore实例。
+     *
+     * @param cert PEM格式的证书字符串。
+     * @param key PEM格式的私钥字符串。
+     * @param alias KeyStore中条目的别名。
+     * @param password KeyStore保护密钥条目的密码。
+     * @param type 可选,KeyStore的类型,默认为"jks"。
+     * @return 转换后的KeyStore实例。如果发生错误,返回null。
+     */
     fun pem2ks(cert: String, key: String, alias: String, password: String, type: String = "jks"): java.security.KeyStore? = try {
         val j_keystore = java.security.KeyStore.getInstance(type)
         j_keystore.load(null, null)

+ 11 - 0
src/main/kotlin/cn/qqck/kotlin/tools/Md5.kt

@@ -1,4 +1,15 @@
 package cn.qqck.kotlin.tools
 
+/**
+ * 对当前字节数组进行MD5哈希运算。
+ *
+ * @return 哈希计算后的字节数组结果,即MD5摘要。
+ */
 fun ByteArray.md5(): ByteArray = java.security.MessageDigest.getInstance("MD5").digest(this)
+
+/**
+ * 对当前字符串进行 MD5 哈希计算。
+ *
+ * @return 哈希计算后的字节数组表示。
+ */
 fun String.md5(): ByteArray = java.security.MessageDigest.getInstance("MD5").digest(this.toByteArray())

+ 16 - 0
src/main/kotlin/cn/qqck/kotlin/tools/String.kt

@@ -1,6 +1,22 @@
 package cn.qqck.kotlin.tools
 
+/**
+ * 将当前字符串转换为字节数组。
+ *
+ * @return 字符串对应的字节数组。如果字符串为空,返回空字节数组。
+ */
 fun String.bytes() = this.toByteArray()
+
+/**
+ * 将当前字符串转换为布尔值。
+ *
+ * 此方法会根据字符串的内容尝试解析为布尔值:
+ * - 如果字符串的值为 "1"、"t"、"T"、"true"、"True"、"yes" 或 "Yes",返回 true。
+ * - 如果字符串的值为 "0"、"f"、"F"、"false"、"False"、"no" 或 "No",返回 false。
+ * - 其他情况返回 null 表示解析失败。
+ *
+ * @return 转换后的布尔值,如果无法解析则返回 null。
+ */
 fun String.bool(): Boolean? {
     if (this == "1" || this == "t" || this == "T" || this == "true" || this == "True" || this == "yes" || this == "Yes") return true
     if (this == "0" || this == "f" || this == "F" || this == "false" || this == "False" || this == "no" || this == "No") return false

+ 13 - 0
src/main/kotlin/cn/qqck/kotlin/tools/Url.kt

@@ -1,4 +1,17 @@
 package cn.qqck.kotlin.tools
 
+/**
+ * 对当前字符串进行 URL 编码。
+ *
+ * 使用 UTF-8 编码方式,将字符串转换为适合在 URL 中传输的格式,替换特殊字符为百分号转义表示。
+ *
+ * @return 返回经过 URL 编码后的字符串表达形式。
+ */
 fun String.enurl(): String = java.net.URLEncoder.encode(this, "utf-8")
+
+/**
+ * 对当前字符串进行URL解码操作,按照UTF-8编码规则将编码后的URL字符串转换为原始字符串。
+ *
+ * @return 解码后的字符串。如果解码失败,可能抛出UnsupportedEncodingException或其他运行时异常。
+ */
 fun String.deurl(): String = java.net.URLDecoder.decode(this, "utf-8")

+ 5 - 5
src/test/kotlin/Main.kt

@@ -1,13 +1,13 @@
-import cn.qqck.kotlin.tools.fget
-import cn.qqck.kotlin.tools.fset
-import cn.qqck.kotlin.tools.json
-import cn.qqck.kotlin.tools.string
+import cn.qqck.kotlin.tools.*
 import java.io.File
 
 fun main() {
     // 机型对比()
     // ggcz_用户()
-    println((System.currentTimeMillis() / 1000L).toInt())
+    println("GgoAAAANSUhEUgAAASwAAACWCAYAAA${Rand.bytes(32).base64(true)}AAAAASUVORK5CYII=")
+    println("GgoAAAANSUhEUgAAASwAAACWCAYAAA${Rand.bytes(32).base64(true)}AAAAASUVORK5CYII=")
+    println(("2a11:5201:2c4f:0eb1:94ee:89a9:8461:df4f:1".isIpv6()))
+
 }
 
 fun ggcz_用户() {