Android数据加密之异或加密算法的实现方法

 更新时间:2016年10月11日 09:35:22   投稿:jingxian  
下面小编就为大家带来一篇Android数据加密之异或加密算法的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异或加密。这种加密方式在之前做Android加密记事本的时候采用过这种加密方式。今天已经把客户端心跳维持、数据包解析对接完了,总结一下这种加密方式。

什么是异或加密?

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

异或运算使用场景?

两个变量的互换(不借助第三个变量)

数据的简单加密解密

异或加密解密实现?

1.固定key的方式

public byte[] encrypt(byte[] bytes) {
    int len = bytes.length;
    int key = 0x12;
    for (int i = 0; i < len; i++) {
      bytes[i] ^= key;
    }
    return bytes;
  }

测试加密解密

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

2.不固定key的方式

加密实现

public byte[] encrypt(byte[] bytes) {
    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) {
    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 = new String(decrypt(bytes));//解密

总结:

位运算可以实现很多高级,高效的运算。比如说加密,乘法中的n次方就是右移n位,速度还快。IM二进制数据包采用异或算法第一能够实现加密,第二采用异或加密算法不会改变二进制数据的长度这对二进制数据包封包起到不小的好处。故作此总结。

以上就是小编为大家带来的Android数据加密之异或加密算法的实现方法全部内容了,希望大家多多支持脚本之家~

相关文章

  • AndroidQ分区存储权限变更及适配的实现

    AndroidQ分区存储权限变更及适配的实现

    这篇文章主要介绍了AndroidQ分区存储权限变更及适配的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 丢失Android系统库或者Conversion to Dalvik format failed with error 1错误的解决方法

    丢失Android系统库或者Conversion to Dalvik format failed with error

    这篇文章主要介绍了丢失Android系统库或者Conversion to Dalvik format failed with error 1错误的解决方法,分析了Android系统库丢失及版本问题的处理技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • 解析android中系统日期时间的获取

    解析android中系统日期时间的获取

    本篇文章是对在android中,如何系统日期时间获取的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Android自定义DigitalClock控件实现商品倒计时

    Android自定义DigitalClock控件实现商品倒计时

    这篇文章主要为大家详细介绍了Android DigitalClock实现商品倒计时,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Android 自定义gradle property详解及实例代码

    Android 自定义gradle property详解及实例代码

    这篇文章主要介绍了Android 自定义gradle property详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • kotlin实战教程之lambda编程

    kotlin实战教程之lambda编程

    这篇文章主要给大家介绍了关于kotlin实战教程之lambda编程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用kotlin具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • Flutter Element概念简明分析

    Flutter Element概念简明分析

    Flutter 中 Element 作用的是作为中枢来管理和调度Widget和RenderObject,这里我们主要说一下RenderObjectWidget 来主要说一下Element 的生命周期,这里我删除了一些assert 的方法,方便查看
    2023-04-04
  • Android Studio真机无线连接USB设备调试运行详解流程

    Android Studio真机无线连接USB设备调试运行详解流程

    你在Android Studio写app时是否也有想过如果可以不用数据线连接手机调试运行就好了?如果需要取出数据线插接的话我肯定是嫌麻烦的,但是模拟器有时候需要测试一些需要硬件支持的功能时又不管用,所以最好的测试还是在真机上,本篇教你扔掉数据线来无线调试
    2021-11-11
  • Android 进程间通信实现原理分析

    Android 进程间通信实现原理分析

    只有你允许客户端从不同的应用程序为了进程间的通信而去访问你的service,以及想在你的service处理多线程,下面为大家详细介绍下
    2013-06-06
  • Android程序启动时出现黑屏问题的解决方法

    Android程序启动时出现黑屏问题的解决方法

    这篇文章主要介绍了Android程序启动时出现黑屏问题的解决方法,分析了黑屏出现的原因及相应的解决方法,需要的朋友可以参考下
    2016-08-08

最新评论