是否可以通过编程方式检查存储在共享首选项中的密钥是否已加密?
用例:
我有一个 onSharedPreferenceChanged 侦听器,用于侦听共享首选项中的更改。如果有任何更改,则它将尝试解密在回调中收到的共享首选项密钥。
由于共享首选项文件同时具有加密和解密的密钥,因此我不想对收到的每个密钥都进行解密。宁可进行检查以验证接收到的密钥是否真正加密,如果是,则进行解密并进一步进行。
示例代码段:
listener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
//Code to decrypt "key"
}
};
我想知道,有没有办法检查回调中接收到的共享首选项密钥是否已加密?
P.S。我是android开发的新手,问题似乎有点天真,但我们非常感谢您的帮助。
答案 0 :(得分:2)
任何体面的现代加密算法都具有其产生的密文与随机噪声无法区分的特性。直观地讲,给定了密文,仅给出了密文,我们无法推断出实际上是的数据是密文还是仅仅是任意随机字节或其他我们在语义上无法理解的编码
只需在产生的任何密文的开头都包含一个可预测的序列,就可以轻松避免此问题。然后,您可以在必要时检查此顺序。
我还要注意,您拥有的加密代码非常不安全。它使用ECB模式且未经身份验证。在适当的情况下,检索明文将非常容易。您需要进一步研究最佳实践对称加密。
此外,在您的评论中,您还说编码为UTF-8。您实际上是从UTF-8 解码。 UTF-8是字符编码。