Android 安全加密:消息摘要Message Digest详解

 更新时间:2016年09月13日 10:08:39   作者:Android-Developer  
本文主要介绍Android安全加密消息摘要Message Digest,这里整理了详细的资料,并说明如何使用Message Digest 和使用注意事项,有需要的小伙伴可以参考下

Android安全加密专题文章索引

以上学习所有内容,对称加密、非对称加密、消息摘要、数字签名等知识都是为了理解数字证书工作原理而作为一个预备知识。数字证书是密码学里的终极武器,是人类几千年历史总结的智慧的结晶,只有在明白了数字证书工作原理后,才能理解Https 协议的安全通讯机制。最终才能在SSL 开发过程中得心应手。

另外,对称加密和消息摘要这两个知识点是可以单独拿来使用的。

知识点串联:

数字证书使用到了以上学习的所有知识

  1. 对称加密与非对称加密结合使用实现了秘钥交换,之后通信双方使用该秘钥进行对称加密通信。
  2. 消息摘要与非对称加密实现了数字签名,根证书机构对目标证书进行签名,在校验的时候,根证书用公钥对其进行校验。若校验成功,则说明该证书是受信任的。
  3. Keytool 工具可以创建证书,之后交给根证书机构认证后直接使用自签名证书,还可以输出证书的RFC格式信息等。
  4. 数字签名技术实现了身份认证与数据完整性保证。
  5. 加密技术保证了数据的保密性,消息摘要算法保证了数据的完整性,对称加密的高效保证了数据处理的可靠性,数字签名技术保证了操作的不可否认性。

通过以上内容的学习,我们要能掌握以下知识点:

  1. 基础知识:bit 位、字节、字符、字符编码、进制转换、io
  2. 知道怎样在实际开发里怎样使用对称加密解决问题
  3. 知道对称加密、非对称加密、消息摘要、数字签名、数字证书是为了解决什么问题而出现的
  4. 了解SSL 通讯流程
  5. 实际开发里怎样请求Https 的接口

1. 常见算法

MD5、SHA、CRC 等

2. 使用场景

  1. 对用户密码进行md5 加密后保存到数据库里
  2. 软件下载站使用消息摘要计算文件指纹,防止被篡改
  3. 数字签名(后面知识点)
  4. 百度云,360网盘等云盘的妙传功能用的就是sha1值
  5. Eclipse和Android Studio开发工具根据sha1值来判断v4,v7包是否冲突
  6. 据说银行的密码使用的就是MD5加密(因为MD5具有不可逆性)

例如软件下载站数据指纹:http://dev.mysql.com/downloads/installer/

3. 使用步骤

//常用算法:MD5、SHA、CRC
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] result = digest.digest(content.getBytes());
//消息摘要的结果一般都是转换成16 进制字符串形式展示
String hex = Hex.encode(result);
//MD5 结果为16 字节(128 个比特位)、转换为16 进制表示后长度是32 个字符
//SHA 结果为20 字节(160 个比特位)、转换为16 进制表示后长度是40 个字符
System.out.println(hex);

消息摘要后的结果是固定长度,无论你的数据有多大,哪怕是只有一个字节或者是一个G 的文件,摘要后的结果都是固定长度。

经常听到有人问这样的问题,MD5 摘要后结果到底是多少位?有的人说是16 位,有的说是128 位,有的说是32 位。到底是多长,这个时候我们就要明白,16 位指的是字节位数,128 位指的是比特位,32 位指的结果转换成16 进制展示的字符位数。

4. 数字摘要原理

//获取实例
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(key.getBytes());
byte[] bytes = digest.digest(key.getBytes());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
 String hex = Integer.toHexString(bytes[i]&0xff);
 if (hex.length() == 1){
 sb.append("0");
 }
 sb.append(hex);
}
String hexstring = sb.toString();

 

相关文章

  • Android数据库Room的实际使用过程总结

    Android数据库Room的实际使用过程总结

    这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以参考下
    2025-01-01
  • Spinner在Dialog中的使用效果实例代码详解

    Spinner在Dialog中的使用效果实例代码详解

    这篇文章主要介绍了Spinner在Dialog中的使用效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Android使用view仿支付宝月账单

    Android使用view仿支付宝月账单

    这篇文章主要为大家详细介绍了Android使用view仿支付宝月账单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Android证书安装过程介绍

    Android证书安装过程介绍

    大家好,本篇文章主要讲的是Android证书安装过程介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Android中Fragment的解析和使用详解

    Android中Fragment的解析和使用详解

    现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上,也有很多的场景可以运用到Fragment了,这篇文章给大家介绍了Android中Fragment的解析和使用。
    2016-11-11
  • Android中自定义Window Title样式实例

    Android中自定义Window Title样式实例

    这篇文章主要介绍了Android中自定义Window Title样式实例,本文给出效果预览和实现方法,需要的朋友可以参考下
    2015-01-01
  • Android性能优化之ViewPagers + Fragment缓存优化

    Android性能优化之ViewPagers + Fragment缓存优化

    这篇文章主要介绍了Android性能优化之ViewPagers+Fragment缓存优化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • ViewFlipper实现上下翻滚轮播效果

    ViewFlipper实现上下翻滚轮播效果

    这篇文章主要为大家详细介绍了ViewFlipper实现上下翻滚轮播效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Android开发笔记XML数据解析方法及优缺点

    Android开发笔记XML数据解析方法及优缺点

    XML数据是一种常见的数据格式,Android开发中需要对其进行解析。常用的XML解析方式有DOM、SAX、Pull和Json等,每种方式都有其优缺点。开发者可以根据具体需求选择合适的解析方式,提高数据解析效率和性能
    2023-05-05
  • Android4.X读取SIM卡短信和联系人相关类实例分析

    Android4.X读取SIM卡短信和联系人相关类实例分析

    这篇文章主要介绍了Android 4.X读取SIM卡短信和联系人相关类,以实例形式分析了Android 4.X读取SIM卡短信和联系人的两个相关类的功能、用法与注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论