我在聊天应用程序中有一个带有消息的表,我想在“房间数据库”中该表的列主体中使用TripleDes加密。我现在要做的是,每当我有一系列新消息时,我都会遍历它们,并将.body字段更改为TripleDes.encrypt(body)
// TripleDes encryption to inserted messages
messageDtoList.forEach {
if (it.body.isNotEmpty())
it.body = TripleDesEncrypt.encrypt(it.body, Params.TRIPLE_DES_KEY)
}
AppDatabase.invoke(MyApplication.instance).messageDao().insert(messageDtoList)
我想知道是否有更好,更正式的方法
最佳答案
使用TypeConverter
可能会有用。我编写了一个名为DecryptedString
的类,该类包装了String和用于处理加密/解密过程的内部Converter类。
class DecryptedString(var value: String = "") {
class Converter {
@TypeConverter
fun decrypt(encrypted: String): DecryptedString {
return DecryptedString(TripleDesEncrypt.decrypt(encrypted, Params.TRIPLE_DES_KEY))
}
@TypeConverter
fun encrypt(decrypted: DecryptedString): String {
return TripleDesEncrypt.encrypt(decrypted.value, Params.TRIPLE_DES_KEY)
}
}
}
然后,必须在
String
类中使用body
类型,而不是对DecryptedString
字段使用MessageModel
类型。
@Entity
data class MessageModel(
@PrimaryKey
var uid: Int,
@TypeConverters(DecryptedString.Converter::class)
@ColumnInfo(name = "decrypted_body")
var body: DecryptedString
//Other fields
)
关于android - 加密Room数据库的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59750299/