大佬教程收集整理的这篇文章主要介绍了深入理解Android MD5数据加密,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_209_2@mD5加密
@H_395_0@mD5是由MD2、MD3、MD4演变过来的,虽然MD5加密算法现在有些人已经将其解开了,但是它的加密机制依然很强大,我想绝大对数还是不会解开的。MD5加密算法是单向加密,是不可逆的一种的加密方式,只能用你的密码才能解开,要不就是会解密算法,否则想都别想解开。@H_209_2@mD5加密的特点
压缩性:任意长度的数据,算出的MD5值长度都是固定的。
容易计算:从原数据计算出MD5值很容易。
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
@H_209_2@mD5应用场景
一致性验证
数字签名
安全访问认证
@H_209_2@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,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,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; }
@H_209_2@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加密
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开发者们有所帮助,如有疑问大家可以留言交流。
以上是大佬教程为你收集整理的深入理解Android MD5数据加密全部内容,希望文章能够帮你解决深入理解Android MD5数据加密所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。