繁体   English   中英

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

[英]Byte Array To String Conversion Inconsistency

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

        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())

按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM