修复:bark加密推送,解密失败 #307 #314

pull/335/head
pppscn 1 year ago
parent 1bc2668ab2
commit ec57b0228a

@ -155,7 +155,10 @@ class BarkFragment : BaseFragment<FragmentSendersBarkBinding?>(), View.OnClickLi
}
binding!!.etTitleTemplate.setText(settingVo.title)
BARK_ENCRYPTION_ALGORITHM_MAP.forEach {
if (it.value == settingVo.transformation) binding!!.spEncryptionAlgorithm.setSelectedItem(it.value)
if (it.value == settingVo.transformation) {
transformation = it.value
binding!!.spEncryptionAlgorithm.setSelectedItem(it.value)
}
}
binding!!.etEncryptionKey.setText(settingVo.key)
binding!!.etEncryptionIv.setText(settingVo.iv)

@ -34,6 +34,7 @@ class BarkUtils {
logId: Long = 0L,
msgId: Long = 0L
) {
//Log.i(TAG, "sendMsg setting:$setting msgInfo:$msgInfo rule:$rule senderIndex:$senderIndex logId:$logId msgId:$msgId")
val title: String = if (rule != null) {
msgInfo.getTitleForSend(setting.title.toString(), rule.regexReplace)
} else {
@ -86,8 +87,13 @@ class BarkUtils {
if (setting.transformation.isNotEmpty() && "none" != setting.transformation && setting.key.isNotEmpty() && setting.iv.isNotEmpty()) {
var transformation = setting.transformation.replace("AES128", "AES").replace("AES192", "AES").replace("AES256", "AES")
val ciphertext = encrypt(requestMsg, transformation, setting.key, setting.iv)
request.params("ciphertext", URLEncoder.encode(ciphertext, "UTF-8"))
request.params("iv", URLEncoder.encode(setting.iv, "UTF-8"))
//Log.d(TAG, "ciphertext: $ciphertext")
//val plainText = decrypt(ciphertext, transformation, setting.key, setting.iv)
//Log.d(TAG, "plainText: $plainText")
//request.params("ciphertext", URLEncoder.encode(ciphertext, "UTF-8"))
//request.params("iv", URLEncoder.encode(setting.iv, "UTF-8"))
request.params("ciphertext", ciphertext)
request.headers("Content-Type", "application/x-www-form-urlencoded")
} else {
request.upJson(requestMsg)
}
@ -124,12 +130,36 @@ class BarkUtils {
}
fun encrypt(plainText: String, transformation: String, key: String, iv: String): String {
//Log.d(TAG, "plainText: $plainText, transformation: $transformation, key: $key, iv: $iv")
val cipher = Cipher.getInstance(transformation)
val keySpec = SecretKeySpec(key.toByteArray(), "AES")
val ivSpec = IvParameterSpec(iv.toByteArray())
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec)
if (transformation.contains("ECB")) {
cipher.init(Cipher.ENCRYPT_MODE, keySpec)
} else if (transformation.contains("CBC")) {
val ivSpec = IvParameterSpec(iv.toByteArray())
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec)
} else {
throw IllegalArgumentException("Unsupported transformation: $transformation")
}
val encryptedBytes = cipher.doFinal(plainText.toByteArray(Charsets.UTF_8))
return Base64.encode(encryptedBytes, Base64.NO_WRAP).toString()
return Base64.encodeToString(encryptedBytes, Base64.NO_WRAP)
}
fun decrypt(encryptedText: String, transformation: String, key: String, iv: String): String {
//Log.d(TAG, "encryptedText: $encryptedText, transformation: $transformation, key: $key, iv: $iv")
val cipher = Cipher.getInstance(transformation)
val keySpec = SecretKeySpec(key.toByteArray(), "AES")
if (transformation.contains("ECB")) {
cipher.init(Cipher.DECRYPT_MODE, keySpec)
} else if (transformation.contains("CBC")) {
val ivSpec = IvParameterSpec(iv.toByteArray())
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec)
} else {
throw IllegalArgumentException("Unsupported transformation: $transformation")
}
val encryptedBytes = Base64.decode(encryptedText, Base64.NO_WRAP)
val decryptedBytes = cipher.doFinal(encryptedBytes)
return String(decryptedBytes, Charsets.UTF_8)
}
}

Loading…
Cancel
Save