Android--消息摘要MD5,SHA加密
2017-12-08 09:55
351 查看
使用场景:
对用户密码进行md5 加密后保存到数据库里
软件下载站使用消息摘要计算文件指纹,防止被篡改
数字签名
百度云,360网盘等云盘的妙传功能用的就是sha1值
Eclipse和Android Studio开发工具根据sha1值来判断v4,v7包是否冲突
据说银行的密码使用的就是MD5加密(因为MD5具有不可逆性)
病毒查杀,把每个病毒文件或apk进行MD5后得到一个特征码,拿着特征码去跟病毒数据库对比,特征码一致说明该文件是病毒
Git版本控制也使用到了sha1
消息摘要是固定长度,与消息内容长度无关,MD5后的摘要结果位数:16 位指的是字节位数,128 位指的是比特位,32 位指的结果转换成16 进制展示的字符位数。
主要就下面三句话:
打印结果:
对用户密码进行md5 加密后保存到数据库里
软件下载站使用消息摘要计算文件指纹,防止被篡改
数字签名
百度云,360网盘等云盘的妙传功能用的就是sha1值
Eclipse和Android Studio开发工具根据sha1值来判断v4,v7包是否冲突
据说银行的密码使用的就是MD5加密(因为MD5具有不可逆性)
病毒查杀,把每个病毒文件或apk进行MD5后得到一个特征码,拿着特征码去跟病毒数据库对比,特征码一致说明该文件是病毒
Git版本控制也使用到了sha1
消息摘要是固定长度,与消息内容长度无关,MD5后的摘要结果位数:16 位指的是字节位数,128 位指的是比特位,32 位指的结果转换成16 进制展示的字符位数。
主要就下面三句话:
//常用算法: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 个字符
package com.example.xiaobai.aes; import java.security.MessageDigest; /** * Created by xiaobai on 2017/12/8/008. */ public class MD5Utils { public static String encode(String pwd) { // MessageDigest 消息摘要 try { MessageDigest digester = MessageDigest.getInstance("MD5"); // 加密,将要加密的字符串转换成字节数组 byte[] digest = digester.digest(pwd.getBytes()); StringBuffer buffer = new StringBuffer(); // 0000-0101 // 1111-1111 // 0000-0101 for (byte b : digest) { // 0xff 表示低8 位 int number = b & 0xff; // int 32 位一个int 是四个字节一个字节8 位 // 任何一个值& 等于0 // & 1 = 1 String hexString = Integer.toHexString(number); if (hexString.length() == 1) { buffer.append("0" + hexString); } else { buffer.append(hexString); } } System.out.println("密码长度---" + buffer.toString().length()); System.out.println("密码---" + buffer.toString()); return buffer.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } }
package com.example.xiaobai.aes; /** * Created by xiaobai on 2017/12/8/008. */ /** * 字节数组与16进制字符串转换工具 */ public class Hex { private static final char[] HEX_CHAR = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; /** * 字节数组转换成16进制字符串 */ public static String encode(byte[] bytes) { if (bytes == null || bytes.length == 0) { return null; } StringBuffer sb = new StringBuffer(bytes.length * 2); // 27对应的十六进制为1b,对应的二进制是00011011 // 取高位和低位:00011011-》0001,1011-》1,b for (int i = 0; i < bytes.length; ++i) { // 取高位:跟0xf0做与运算后再右移4位 int high = (bytes[i] & 0xf0) >> 4;// 0xf0: 11110000 // 取低位:跟0x0f做与运算 int low = bytes[i] & 0x0f;// 0x0f: 00001111 // 字符映射 sb.append(HEX_CHAR[high]).append(HEX_CHAR[low]); } return sb.toString(); } /** * @param hex 16进制字符 */ public static byte[] decode(String hex) { if (hex == null || hex.length() == 0) { return null; } // 16进制转byte,长度减半,"1b"-->27 int len = hex.length() / 2; byte[] result = new byte[len]; String highStr = null; String lowStr = null; int high = 0; int low = 0; for (int i = 0; i < len; i++) { // 高位值 highStr = hex.substring(i * 2, i * 2 + 1);// "1b"的高位为"1" high = Integer.parseInt(highStr, 16);// 高位转为10进制 // 低位值 lowStr = hex.substring(i * 2 + 1, i * 2 + 2);// "1b"的低位为"b" low = Integer.parseInt(lowStr, 16);// 低位转为10进制 // 合计值 result[i] = (byte) ((high << 4) + low);// 相当于:(高位*16) + 低位 } return result; } }
package com.example.xiaobai.aes; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String text = "hello MD5!"; String result = MD5Utils.encode(text); Log.i("MD5",result); } }
打印结果:
12-08 09:53:08.186 6545-6545/com.example.xiaobai.aes I/MD5: f350b8db461c95e347453ad01a587878
相关文章推荐
- Android中的各种加密和MD5摘要
- 支持APP手机应用(android和ios)接口调用 传输验证可用 shiro 的 MD5、SHA 等加密
- 消息摘要 MD5 和 SHA 的使用
- Java 消息摘要 散列 MD5 SHA
- APP手机应用(android和ios)接口调用 传输验证可用 shiro 的 MD5、SHA 等加密
- Android安全加密:消息摘要Message Digest
- 消息摘要(单项加密)之MD,SHA,MAC,RipeMD
- java中消息摘要MD5与SHA-1
- 消息摘要的编程使用(MD5、SHA、HMAC)
- Android安全加密:消息摘要Message Digest
- Android安全加密:消息摘要Message Digest
- Java/Android GZip,BZip2,Zip 压缩封装 和 MD5,RSA,SHA,Desede 加密封装
- Android 安全加密:消息摘要Message Digest详解
- Base64编码、MD5消息摘要、对称加密、非对称加密
- Android安全加密:消息摘要Message Digest
- android MD5加密方式
- Java中的消息摘要、加密与数字签名
- 实现MD5和SHA加密的类
- JAVA中MD5散列表加密与Spring中MD5 SHA加密比较
- 不可逆加密,数字签名,Java实现,摘要,MD5,SHA128,SHA256