jam*_*s04 1 android tripledes kotlin android-room
我在聊天应用程序中有一个包含消息的表格,我想在我的房间数据库的表格的列正文中使用 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)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好,更正式的方法来做到这一点
使用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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
然后,您必须在类中使用String类型,而不是使用类型作为body字段。DecryptedStringMessageModel
@Entity
data class MessageModel(
        @PrimaryKey
        var uid: Int,
        @TypeConverters(DecryptedString.Converter::class)
        @ColumnInfo(name = "decrypted_body")
        var body: DecryptedString
        //Other fields
)
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           521 次  |  
        
|   最近记录:  |