时间:2021-02-05 09:40:09 | 栏目:Android代码 | 点击:次
Android安全加密专题文章索引
以上学习所有内容,对称加密、非对称加密、消息摘要、数字签名等知识都是为了理解数字证书工作原理而作为一个预备知识。数字证书是密码学里的终极武器,是人类几千年历史总结的智慧的结晶,只有在明白了数字证书工作原理后,才能理解Https 协议的安全通讯机制。最终才能在SSL 开发过程中得心应手。
另外,对称加密和消息摘要这两个知识点是可以单独拿来使用的。
知识点串联:
数字证书使用到了以上学习的所有知识
通过以上内容的学习,我们要能掌握以下知识点:
1. 常见算法
MD5、SHA、CRC 等
2. 使用场景
例如软件下载站数据指纹: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();