Android本地数据安全问题,常用加密简单汇总,网上搜集的资料,方便查看

来源:互联网 发布:linux 中单引号的作用 编辑:程序博客网 时间:2024/05/19 18:43

一、Android数据加密之Rsa加密

                   RSA算法是最流行的公钥密码算法,使用长度可以变化的密钥。RSA是第一个既能用于数据加密也能用于数字签名的算法。

                   公钥加密只能用私钥解密,私钥加密只能用公钥解密,还可以分段加密、分段解密。

                   RSA的安全性依赖于大数分解,小于1024位的N已经被证明是不安全的,而且由于RSA算法进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,这是RSA最大的缺陷,因此通常只能用于加密少量数据或者加密密钥,但RSA仍然不失为一种高强度的算法。

      使用:

      1、生成密钥对

      2、使用公钥加密、私钥解密 或者 私钥加密、公钥解密

           私钥的加解密都很耗时,所以可以根据不同的需求采用不能方案来进行加解密。个人觉得服务器要求解密效率高,客户端私钥加密,服务器公钥解密比较好一点

           加密后数据大小的变化:数据量差不多是加密前的1.5倍。

二、 Android数据加密之Aes加密

        AES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。替代原先的DES。

三、Android数据加密之Des加密

            DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES使用56位密钥,以现代    计算能力,24小时内即可被破解。

四、Android数据加密之MD5加密

                   MD5加密特点:

                 压缩性:任意长度的数据,算出的MD5值长度都是固定的。

                 容易计算:从原数据计算出MD5值很容易。

                 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

                 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

           MD5应用场景:

                 一致性验证、数字签名、安全访问认证

五、 Android数据加密之Base64编码算法

               Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64并不是安全领域的加密算法,其       实Base64只能算是一个编码算法,对数据内容进行编码来适合传输。在计算机中任何数据都是按ascii存储的,而ascii码的128~255之间的值是不可见字符。而在网络上 交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了

六、 Android数据加密之异或加密算法

                            异或运算中,如果某个字符(或数值)x 与 一个数值m 进行异或运算得到y,则再用y 与 m 进行异或运算就可以还原为 x ,因此应用这个原理可以实现数据的加密解密功能。

           使用场景:

                 两个变量的互换(不借助第三个变量)、数据的简单加密解密

           实现:

                 1、固定key的方式(这种方式加密解密 算法一样)

                 public byte[] encrypt(byte[] bytes) {

                      if (bytes == null) {

                            return null;

                      }

                      int len = bytes.length;

                      int key = 0x12;

                      for (int i = 0; i < len; i++) {

                            bytes[i] ^= key;

                      }

                      return bytes;

                 }

 

           byte[] bytes = encrypt("whoislcj".getBytes());//加密

           Stringstr1 = new String(encrypt(bytes));//解密

 

         2.不固定key的方式

              加密实现

                 publicbyte[] encrypt(byte[] bytes) {

                      if(bytes == null) {

                            returnnull;

                      }

                      int len = bytes.length;

                      int key = 0x12;

                      for (int i = 0; i < len; i++) {

                          bytes[i] = (byte) (bytes[i] ^ key);

                          key = bytes[i];

                      }

                     return bytes;

                 }

                 解密实现

                 public byte[] decrypt(byte[]bytes) {

                      if (bytes == null) {

                            return null;

                      }

                      int len = bytes.length;

                      int key = 0x12;

                      for (int i = len - 1; i> 0; i--) {

                            bytes[i] = (byte)(bytes[i] ^ bytes[i - 1]);

                      }

                      bytes[0] = (byte)(bytes[0] ^ key);

                      return bytes;

                 }

                 byte[]bytes = encrypt("whoislcj".getBytes());//加密

                 String str1 = newString(decrypt(bytes));//解密

           位运算可以实现很多高级,高效的运算。比如说加密,乘法中的n次方就是右移n位,速度还快。IM二进制数据包

      采用异或算法第一能够实现加密,第二采用异或加密算法不会改变二进制数据的长度这对二进制数据包封包起到不小的好

      处。

原创粉丝点击