简介:
异或加密其实就是利用异或运算的自反性。一个数A 连续异或同样一个数B,最后的结果还是A 自身。即,
A xor B xor B = A
如 数据加密 ---- 总篇 中提到的,对于加密其实就是算法 + 密钥,而对于异或加密算法比较简单。
二战期间,各国为了电报加密,对密码学进行了大量的研究和实践,其中就包括 XOR 加密。
战后,美国数学家香农(Claude Shannon)将他的研究成果公开发表,证明了只要满足两个条件,XOR 加密是无法破解的。
key的长度大于等于message
key必须是一次性的,且每次都要随机产生
理由很简单,如果每次的 key 都是随机的,那么产生的Cipher Text 具有所有可能的值,而且是均匀分布,无法从Cipher Text看出 Message 的任何特征。也就是说,它具有最大的"信息熵",因此完全不可能破解。这被称为 XOR 的"完美保密性"(perfect secrecy)。
满足上面两个条件的 key ,叫做 one-time pad(缩写为OTP),意思是"一次性密码本",因为以前这样的 key 都是印刷成密码本,每次使用的时候,必须从其中挑选key
。
异或加密是强度极低的一种方式,除非极长的密码,才能确保加密的有效性,但是,使密码达到与数据一致,显然是不可能的,因此,异或加密的数据长度会受到限制。由于异或加密的强度极低,因此,应根据数据库加密的保密性来决定采用什么样的加密技术,如果想获得比较可靠的加密,可以采用分组交换式加密方案。
密钥保存:
如 数据加密 ---- 总篇 中提到的,数据的加密技术中也包含了密钥的管理技术,包括密钥的产生、分配、保存、更换和销毁等各个环节上的保密措施。不论是这里的异或加密,还是其他的加密方式,密钥的保护十分重要。对于Java 来说,很容易被反编译,这边的密钥可以通过native 保存(一般so还是很难被破译)或者服务器上。
当然,为了让 XOR 加密更可靠,可以添加一些其他的操作,例如,对数据进行循环的位移。
附:
Android 中实例实现请看:https://blog.csdn.net/shift_wwx/article/details/84062196
参考: