Android中的加密解密分为基于Java和基于C/C++两类,几乎C/C++有的加密算法在Java中都实现了。加密算法大多是公开的,Java反编译也无所谓,可能做成C/C++会更高效一些。出于各种考虑将算法做成C/C++可能会更安全一些。在以后JNI调用部分,会更新相关C/C++加密算法。本篇是对Android中主要的加密方法的总结,之后篇幅中会结合代码详细介绍加密算法。对每个算法代码,我都会实际的跑跑,确保正确可用。
加密:是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。
解密:将“密文”变为“明文”的过程被称为解密。
一般可以分为对称加密(如DES、AES等)、非对称加密(如RSA等)和单向加密(如MD5等)3类算法。
在对称加密算法中、双方使用的密钥相同,要求解密方事先必须知道加密密钥。这类加密算法技术较为成熟,加密效率高。
在非对称加密算法中,收发双方使用不同密钥,发方使用公约,收方使用私有密钥,保密性更高,但效率低。
单向加密算法在加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,密文无法解密。只有重新输入明文,并经过同样的加密算法处理,得到相同的密文并被系统重新识别后,才能真正解密。
A:DES算法
DES是数据加密标准的简称,它是第一代公开的、完全说明实现细节的商用密码算法,并在1977年被美国政府真是采纳作为联邦标准。在1998年之后,DES不在作为联邦加密算法。但是时至今日,他在保护金融数据的安全,如自动取款机中,使用较多。DES算法经过16轮迭代,使用56比特长度密钥加密64比特长度(分组长度)的明文获得64别的密文。
B:AES算法
AES是高级加密标准(Advanced Encryption Standard)的简称,用于替代原先的DES,保护敏感信息。该算法由比利时密码学家发明,也被成为Rijndael算法。AES算法的分组长度为128比特,其密钥长度分别为128比特、192比特和256比特。
C:MD5算法
MD5全称是Message-digest Algorithm 5(信息-摘要算法),用于确保信息传输完整一致。在20世纪90年代初由Rivest设计,经MD2、MD3、MD4、MD发展而来。MD5用的是散列函数(Hash函数),其经典应用是对一段信息产生信息摘要,从而实现数值签名、登录口令的认证、为文档生成“”数字指纹“”等。MD5算法的基本思想是以512位分组来处理输入的信息,且每一分组又被划分为16个32位自分组级联后将产生一个128位的散列值。
我真是拼了,为了写这段按照书本上的字打了一遍,希望自身能记下,也希望看过的人没有白看。加密算法还有很多种,搞过密码学的肯定觉得这些都是小菜一碟。咱们以后再添加更多的加密算法吧。在JNI调用部分会对密码算法做更多扩充。敬请关注!