消息摘要介绍
MessageDigest:消息摘要,摘要信息(唯一的),软件用判断正版盗版软件
三个算法:md5、sha1、sha256
特点:
- * 不可逆(通过密文不能推出明文,只能撞库)
- * 加密后密文长度固定,1kb字符串和1G字符串加密结果长度一样
消息摘要md5的使用
public static String Md5Str(String str) { try { MessageDigest digest = MessageDigest.getInstance(MD5); byte[] bytes = digest.digest(str.getBytes()); String s = Hex.bytes2Hex(bytes); // String s = Hex.toHex(bytes); return s; } catch (Exception e) { e.printStackTrace(); } return null; }
获取文件md5值
public static String MD5File(String path) { try { FileInputStream fis = new FileInputStream(path); MessageDigest digest = MessageDigest.getInstance(MD5); byte[] buf = new byte[1024]; int len = 0; while ((len = fis.read(buf)) != -1) { digest.update(buf, 0, len); } byte[] bytes = digest.digest(); String s = Hex.bytes2Hex(bytes); // String s = Hex.toHex(bytes); return s; } catch (Exception e) { Log.e(TAG, "SHA1File: " + e.getLocalizedMessage()); e.printStackTrace(); } return null; }
消息摘要sha1和sha256的使用
md5:16(加密后密文长度16个字节),32(密文转成16进制32个字节)
sha1:20(加密后密文长度20个字节),40(密文转成16进制40个字节)
sha256:32(加密后密文长度32个字节),64(密文转成16进制64个字节)
消息摘要应用
开发中使用哪个算法:常用md5
应用场景:用户登录/注册,用户密码必须加密传输
只要是用户密码必须使用md5(不可逆的),服务器存储的是密文
public static void login1() { String username = Constant.username; String password = "123456"; try { String url = Constant.base_url + "login?username=" + username + "&password=" + MD5.Md5Str(password + "+aa/rewc"); HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); InputStream ins = conn.getInputStream(); String s = IoUtils.convertStreamToString(ins); Log.e(TAG, "login: " + s); } catch (Exception e) { e.printStackTrace(); } }
撞库破解md5:不可能穷尽所有密文,加密多次,加盐