MD5加密MD5是由MD2、MD3、MD4演变过来的,虽然MD5加密算法现在有些人已经将其解开了,但是它的加密机制依然很强大,我想绝大对数还是不会解开的。MD5加密算法是单向加密,是不可逆的一种的加密方式,只能用你的密码才能解开,要不就是会解密算法,否则想都别想解开。
MD5加密的特点 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
容易计算:从原数据计算出MD5值很容易。
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5应用场景 一致性验证
数字签名
安全访问认证
MD5加密算法实现1.)计算字符串MD5值 public static String md5(String string) {if (TextUtils.isEmpty(string)) { return "";}MessageDigest md5 = null;try { md5 = MessageDigest.getInstance("MD5"); byte[] bytes = md5.digest(string.getBytes()); String result = ""; for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) { temp = "0" + temp;}result += temp; } return result;} catch (NoSuchAlgorithmException e) { e.printStackTrace();}return ""; }
2.)计算文件的MD5值 // 计算文件的 MD5 值 public static String md5(File file) {if (file == null || !file.isFile() || !file.exists()) { return "";}FileInputStream in = null;String result = "";byte buffer[] = new byte[8192];int len;try { MessageDigest md5 = MessageDigest.getInstance("MD5"); in = new FileInputStream(file); while ((len = in.read(buffer)) != -1) {md5.update(buffer, 0, len); } byte[] bytes = md5.digest(); for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) { temp = "0" + temp;}result += temp; }} catch (Exception e) { e.printStackTrace();}finally { if(null!=in){try { in.close();} catch (IOException e) { e.printStackTrace();} }}return result; }
或者采用nio的方式 public static String md5(File file) {String result = "";FileInputStream in = null;try { in = new FileInputStream(file); MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length()); MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(byteBuffer); byte[] bytes = md5.digest(); for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) { temp = "0" + temp;}result += temp; }} catch (Exception e) { e.printStackTrace();} finally { if (null != in) {try { in.close();} catch (IOException e) { e.printStackTrace();} }}return result; }
MD5加密安全性探讨:虽然说MD5加密本身是不可逆的,但并不是不可破译的,网上有关MD5解密的网站数不胜数,破解机制采用穷举法,就是我们平时说的跑字典。所以如何才能加大MD5破解的难度呢?
1.)对字符串多次MD5加密 public static String md5(String string, int times) {if (TextUtils.isEmpty(string)) { return "";}String md5 = md5(string);for (int i = 0; i < times - 1; i++) { md5 = md5(md5);}return md5(md5); }
2.)MD5加盐加盐的方式也是多种多样
string+key(盐值key)然后进行MD5加密
用string明文的hashcode作为盐,然后进行MD5加密
随机生成一串字符串作为盐,然后进行MD5加密
public static String md5(String string, String slat) {if (TextUtils.isEmpty(string)) { return "";}MessageDigest md5 = null;try { md5 = MessageDigest.getInstance("MD5"); byte[] bytes = md5.digest((string + slat).getBytes()); String result = ""; for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) { temp = "0" + temp;}result += temp; } return result;} catch (NoSuchAlgorithmException e) { e.printStackTrace();}return ""; }
总结以上就是关于Android MD5数据加密的全部内容,希望能对Android开发者们有所帮助,如有疑问大家可以留言交流。