即时通讯是互联网的重要应用形态之一,安全性一直是开发者需要优先考虑的基础问题,并不是使用了加密就绝对安全了,如果加密函数使用不正确,加密数据很容易受到逆向破解攻击。如何正确地理解和使用加密技术则显的尤其重要。

密码学的三大作用:加密( Encryption)、认证(Authentication),鉴定(Identification) 。

加密:防止坏人获取你的数据。
认证:防止坏人修改了你的数据而你却并没有发现。
鉴权:防止坏人假冒你的身份。

明文、密文、密钥、对称加密算法、非对称加密算法,这些基本概念和加密算法原理就不展开叙述了。

Android SDK使用的API和JAVA提供的基本相似,由以下部分组成:

Java Cryptography Architecture:JCA,java加密体系结构;
    Java Cryptography Extension:JCE,Java加密扩展包);
    Java Secure Sockets Extension:JSSE,Java安全套接字扩展包;
    Java Authentication and Authentication Service:JAAS,Java 鉴别与安全服务。

JCA提供基本的加密框架,如证书、数字签名、消息摘要和密钥对产生器。

Base64编码算法是一种用64个字符(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/)来表示任意二进制数据的方法。在计算机网络发展的早期,由于“历史原因”,电子邮件不支持非ASCII码字符,如果要传送的电子邮件带有非ASCII码字符(诸如中文)或者图片,用户收到的电子邮件将会是一堆乱码,因此发明了Base64编码算法。至于为何会乱码?请大家自行Google。在加解密算法中,原始的数据和加密后的数据一般也是二进制数据,为了不传输出错,方便保存或者调试代码,一般需要对加密后的数据进行base64编码。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

Android提供了Base64编码的工具类android.util.Base64,可以直接使用,不用自己去实现base64编码的算法了。

【开发者建议】:
base64只是一种编码方式,并不是一种加密算法,不要使用base64来加密数据。

在Android加密算法中需要随机数时要使用SecureRandom来获取随机数。

注意不要给SecureRandom设置种子。调用seeded constructor或者setSeed(byte[])是不安全的。SecureRandom()默认使用的是dev/urandom作为种子产生器,这个种子是不可预测的。

【开发者建议】:

不要使用Random类来获取随机数。
    在使用SecureRandom时候,不要设置种子。

Hash算法是指任意长度的字符串输入,此算法能给出固定n比特的字符串输出,输出的字符串一般称为Hash值。

具有以下两个特点:

抗碰撞性:寻找两个不同输入得到相同的输出值在计算上是不可行的,需要大约  的时间去寻找到具有相同输出的两个输入字符串。
    不可逆:不可从结果推导出它的初始状态。

抗碰撞性使Hash算法对原始输入的任意一点更改,都会导致产生不同的Hash值,因此Hash算法可以用来检验数据的完整性。我们经常见到在一些网站下载某个文件时,网站还提供了此文件的hash值,以供我们下载文件后检验文件是否被篡改。 不可逆的特性使Hash算法成为一种单向密码体制,只能加密不能解密,可以用来加密用户的登录密码等凭证。

实际开发过程中经常会对url的各个参数,做词典排序,然后取参数名和值串接后加上某个SECRET字符串,计算出hash值,作为此URL的签名, 如foo=1, bar=2, baz=3 排序后为bar=2, baz=3, foo=1,做hash的字符串为:SECRETbar2baz3foo1,在参数和值之间没有分隔符,则”foo=bar”和”foob=ar”的hash值是一样的,”foo=bar&fooble=baz”和”foo=barfooblebaz”一样,这样通过精心构造的恶意参数就有可能与正常参数的hash值一样,从而骗过服务器的签名校验。

要确保加密的消息不是别人伪造的,需要提供一个消息认证码(MAC,Message authentication code)。 消息认证码是带密钥的hash函数,基于密钥和hash函数。密钥双方事先约定,不能让第三方知道。

消息发送者使用MAC算法计算出消息的MAC值,追加到消息后面一起发送给接收者。接收者收到消息后,用相同的MAC算法计算接收到消息MAC值,并与接收到的MAC值对比是否一样。

在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
该算法的缺点是,如果一旦密钥泄漏,那么加密的内容将都不可信了。

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密(这个过程可以做数字签名)。
非对称加密主要使用的是RSA算法。

PBE是一种基于口令的加密算法,其特点是使用口令代替了密钥,而口令由用户自己掌管,采用随机数杂凑多重加密等方法保证数据的安全性。

开发者建议:
使用基于口令的加密算法PBE时,生成密钥时要加盐,盐的取值最好来自SecureRandom,并指定迭代次数。

浅析即时通讯开发之Android端加密算法相关推荐

  1. 即时通讯开发之MobileIMSDK-Web介绍

    MobileIMSDK-Web是一套纯JS编写的Web端即时通讯框架(含服务端): 1)超轻量级.极少依赖:     2)纯JS编写.高度提炼,简单易用:     3)基于流行的socket.io网络 ...

  2. 即时通讯开发之WebRTC服务器是如何联接通话的

    通过WebRTC的端到端通信通常被人们所误解.WebRTC并不是真正意味着你不需要服务器来协商和联接通话.它只意味着,在多数情况中,你可以直接地在浏览器之间进行通信. WebRTC,名称源自网页实时通 ...

  3. 浅析即时通讯开发中移动端实时消息推送技术

    实时消息推送在移动端互联网时代很平常,也很重要,它的存在让智能终端真正成为全时信息传播的工具.本文将从移动端无线网络的特点来谈谈实时消息推送的技术原理及相关问题,希望能给你带来些许启发. 移动端实时消 ...

  4. 浅析即时通讯开发之移动端实时音视频直播技术编码和封装

    视频编码是本系列一个重要的部分,如果把整个流媒体比喻成一个物流系统,那么编解码就是其中配货和装货的过程,这个过程非常重要,它的速度和压缩比对物流系统的意义非常大,影响物流系统的整体速度和成本.同样,对 ...

  5. android asmack和xmpp的关系,Android即时通讯开发之XMPP (一)初识XMPP协议和asmack

    XMPP 消息格式 Jabber/XMPP 系统使用 XML 流在不同实体之间相互传输数据.在两个实体的连接期间,XML 流将从一个实体传送到另一个实体.在实体间,有三个顶层的 XML 元素: ,和. ...

  6. android程序移动到Linux,Android应用开发之Android 系统 -- 使用Xshell在Windows系统和Linux系统之间进行文件传输...

    本文将带你了解Android应用开发之Android 系统 -- 使用Xshell在Windows系统和Linux系统之间进行文件传输,希望本文对大家学Android有所帮助. 使用Xshell在Wi ...

  7. 镜像处理坐标 android,Android应用开发之Android重写ImageView实现图片镜像效果的代码教程...

    本文将带你了解Android应用开发之Android重写ImageView实现图片镜像效果的代码教程,希望本文对大家学Android有所帮助. 前两天朋友问我一个问题,如何实现从手机系统相册加载一张图 ...

  8. android添加截图功能,Android应用开发之Android 5.0及以上编程实现屏幕截图功能的方法...

    本文将带你了解Android应用开发Android 5.0及以上编程实现屏幕截图功能的方法,希望本文对大家学Android有所帮助. 本文实例讲述了Android   5.0及以上编程实现屏幕截图功能 ...

  9. android 图片横竖判断_Android应用开发之android 判断ImageView当前显示的是哪一张图片...

    本文将带你了解Android应用开发之android   判断ImageView当前显示的是哪一张图片,希望本文对大家学Android有所帮助. 判断ImageView当前显示的是哪一张图片 Java ...

最新文章

  1. usaco Cowxor (trie 树)
  2. 数据库SQL Server2012笔记(二)——表的管理
  3. python123.io作业_Python自动化开发学习3
  4. php faker 中文,使用faker 生成中文测试数据
  5. 计算机二级的笔记,我的笔记全国计算机等级考试二级教程
  6. selenium webdriver模拟鼠标键盘操作
  7. pat 甲级 1034. Head of a Gang (30)
  8. 学习C/C++的简单方法
  9. 云存储技术-JDK的安装
  10. smartctl 输出详解
  11. python repair修复功能_详解Python修复遥感影像条带的两种方式
  12. 函数可重入问题reentrant functions
  13. Python进阶:值传递,引用传递?不存在的,是赋值传递
  14. Python中的抽象
  15. Python Django之路由系统
  16. 比特币以太坊数字货币钱包安全助记词安全问题
  17. 好好说说互联网IT行业加班那点儿事
  18. 用c语言解题的程序,C语言实现的数独解题程序
  19. IT6561 IT6563 IT6562 IT6564系列 DP转HDMI
  20. gin框架下参数的自定义验证小示例

热门文章

  1. R语言-datacamp笔记-introduction to R-3 factor
  2. 使用jrtp与opus构建的windows局域网多人聊天dll
  3. BPI-Bit 开发板带有Xtensa 32位LX6双核处理器的嵌入式系统的ESP 32
  4. 我参加“青软实训”的培训
  5. 获取Android手机MAC的一些方法
  6. 用C语言计算一元二次方程式
  7. EI数据库下载的记录主要格式说明
  8. 简体中文版的Intellij IDEA如何取消绿色波浪线拼写错误
  9. Nexus搭建私有Maven仓库用户角色创建和权限分配
  10. 显示测试漏光软件,【惠科 C240 VA曲面显示器使用总结】游戏|热键|检测软件|漏光|显示_摘要频道_什么值得买...