字节数组到字符串的转换不一致



我正在android上测试AES加密,我需要将加密的文本转换为字符串,以便将其存储在我的firebase数据库中。我成功地做到了。当我试图从数据库中检索字符串并将其转换回字节数组进行解密时,问题就出现了。检索到的字符串与发送到数据库的字符串相同,但当我将其转换为字节数组并比较这两个值时,它们不同,如下面的代码示例所示。我甚至确保使用相同的Charset,但这并没有解决问题。

val encryptedPair: Pair<ByteArray,ByteArray> = encrypt("text")
val enc: MutableMap<String, Any> = HashMap()
enc["ciphertext"] = encryptedPair.second.toString(Charsets.UTF_8).trim()
fireStoreDatabase.collection("enc").document("test").set(enc)
.addOnSuccessListener {
fireStoreDatabase.collection("enc").document("test").get()
.addOnSuccessListener { doc->
//The below if condition prints out encrytion method: diff
if(encryptedPair.second.contentEquals(doc.getString("password")!!.toByteArray(Charsets.UTF_8)))
Log.e("encryption method: ","same")
else
Log.e("encryption method: ","diff")
}
}

这种差异会导致解密过程失败。请注意,当我尝试在本地使用值进行加密和解密时,它会按预期工作。所以我知道问题出在我从firebase得到的字节数组上。

如有任何建议,我们将不胜感激。

正如Jon Skeet所建议的,使用

val enc: MutableMap<String, Any> = HashMap()
enc["ciphertext"] = Blob.fromBytes(encryptedPair.second)
fireStoreDatabase.collection("enc").document("test").set(enc)

将数据保存到firebase,然后使用进行检索

doc.getBlob("ciphertext")!!.toBytes())

工作如预期。

最新更新