diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/setting/BarkSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/setting/BarkSetting.kt index 0448a2e8..41b7d9d5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/setting/BarkSetting.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/setting/BarkSetting.kt @@ -24,7 +24,7 @@ data class BarkSetting( //加密密钥 val key: String = "", //初始偏移向量 - val iv: String = "", + var iv: String = "", //持续提醒 val call: String = "", //自动复制模板 diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/BarkFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/BarkFragment.kt index 7b817ea0..cd2ff3e6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/BarkFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/BarkFragment.kt @@ -280,7 +280,7 @@ class BarkFragment : BaseFragment(), View.OnClickLi } else if (transformation.startsWith("AES256") && key.length != 32) { throw Exception(getString(R.string.bark_encryption_key_error3)) } - if (transformation.contains("CBC") && iv.length != 16) { + if (transformation.contains("CBC") && iv.isNotEmpty() && iv.length != 16) { throw Exception(getString(R.string.bark_encryption_key_error4)) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/BarkUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/BarkUtils.kt index 706c5205..1dd924a0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/BarkUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/BarkUtils.kt @@ -8,6 +8,7 @@ import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.result.BarkResult import com.idormy.sms.forwarder.entity.setting.BarkSetting import com.idormy.sms.forwarder.utils.Log +import com.idormy.sms.forwarder.utils.RandomUtils import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.interceptor.BasicAuthInterceptor @@ -15,11 +16,12 @@ import com.idormy.sms.forwarder.utils.interceptor.LoggingInterceptor import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.exception.ApiException +import java.net.URLEncoder import javax.crypto.Cipher import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec -@Suppress("RegExpRedundantEscape", "UselessCallOnNotNull") +@Suppress("RegExpRedundantEscape", "UselessCallOnNotNull", "CanUnescapeDollarLiteral") class BarkUtils { companion object { @@ -93,10 +95,15 @@ class BarkUtils { val requestMsg: String = Gson().toJson(msgMap) Log.i(TAG, "requestMsg:$requestMsg") //推送加密 - if (setting.transformation.isNullOrBlank() || "none" == setting.transformation || setting.key.isNullOrBlank() || setting.iv.isNullOrBlank()) { + if (setting.transformation.isNullOrBlank() || "none" == setting.transformation || setting.key.isNullOrBlank()) { request.upJson(requestMsg) } else { val transformation = setting.transformation.replace("AES128", "AES").replace("AES192", "AES").replace("AES256", "AES") + if (setting.iv.isNullOrBlank()) { + // 留空则随机16字符 + setting.iv = RandomUtils.getRandomNumbersAndLetters(16).toString() + request.params("iv", URLEncoder.encode(setting.iv, "UTF-8")) + } val ciphertext = encrypt(requestMsg, transformation, setting.key, setting.iv) //Log.d(TAG, "ciphertext: $ciphertext") //val plainText = decrypt(ciphertext, transformation, setting.key, setting.iv) diff --git a/app/src/main/res/layout/fragment_senders_bark.xml b/app/src/main/res/layout/fragment_senders_bark.xml index 21f65fd3..8838d763 100644 --- a/app/src/main/res/layout/fragment_senders_bark.xml +++ b/app/src/main/res/layout/fragment_senders_bark.xml @@ -389,7 +389,8 @@ android:layout_weight="1" android:hint="@string/bark_encryption_key_tips" android:singleLine="true" - app:met_clearButton="true" /> + app:met_clearButton="true" + app:met_passWordButton="true" /> @@ -413,7 +414,8 @@ android:layout_weight="1" android:hint="@string/bark_encryption_iv_tips" android:singleLine="true" - app:met_clearButton="true" /> + app:met_clearButton="true" + app:met_passWordButton="true" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index fb00f543..96796ec9 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -598,11 +598,11 @@ AES Key corresponding key on bark AES iv - corresponding iv on bark + corresponding iv on bark or keep empty AES Key must be 16 characters AES Key must be 24 characters AES Key must be 32 characters - AES iv must be 16 characters + AES iv must be 16 characters or empty Fill in the username before @ other diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 07adad81..a988bd6d 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -600,10 +600,10 @@ 对应bark上的key 偏移向量 对应bark上的iv - 加密密钥必须是16位 + 加密密钥必须是16位 或 留空随机产生 加密密钥必须是24位 加密密钥必须是32位 - 偏移向量必须是16位 + 偏移向量必须是16位 或 留空 填写 @ 前面的用户名 其他邮箱 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 6ecb7a3f..8a474a86 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -600,10 +600,10 @@ 對應bark上的key 偏移向量 對應bark上的iv - 加密密鑰必須是16位 + 加密密鑰必須是16位 或 留空随机产生 加密密鑰必須是24位 加密密鑰必須是32位 - 偏移向量必須是16位 + 偏移向量必須是16位 或 留空 填寫 @ 前面的用戶名 其他郵箱 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index db1b658b..112ebdab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -628,11 +628,11 @@ 加密密钥 对应bark上的key 偏移向量 - 对应bark上的iv + 对应bark上的iv 或 留空随机产生 加密密钥必须是16位 加密密钥必须是24位 加密密钥必须是32位 - 偏移向量必须是16位 + 偏移向量必须是16位 或 留空 填写 @ 前面的用户名 其他邮箱