今天建民老师讲解了系统的安全性问题,涉及了MD5加密算法,之前只是使用过几次,没有特别了解,我上网查询了相关的资料,做一下总结。
MD5的作用
①一致性检验。
②数字签名。
③安全访问认证,这个就是平时系统设计的问题了。
在用户注册时,会将密码进行md5加密,存到数据库中。这样可以防止那些可以看到数据库数据的人,恶意操作了
md5是唯一的吗?
md5作为数据库中的主键可行吗?这就涉及到一个问题,md5值是唯一的吗?答案是,不唯一。
也就是一个原始数据,只对应一个md5值;
但是一个md5值,可能对应多个原始数据。
md5不能破解吗?
md5是不可逆的,也就是没有对应的算法,从生产的md5值逆向得到原始数据。
但是如果使用暴力破解,那就另说了。
md5特点:
1.长度固定:
不管多长的字符串,加密后长度都是一样长。
作用:方便平时信息的统计和管理。
2.易计算:
字符串和文件加密的过程是容易的。
作用: 开发者很容易理解和做出加密工具。
3.细微性
一个文件,不管多大,小到几k,大到几G,你只要改变里面某个字符,那么都会导致MD5值改变。
作用:很多软件和应用在网站提供下载资源,其中包含了对文件的MD5码,用户下载后只需要用工具测一下下载好的文件,通过对比就知道该文件是否有过更改变动。
4.不可逆性
你明明知道密文和加密方式,你却无法反向计算出原密码。
作用:基于这个特点,很多安全的加密方式都是用到.大大提高了数据的安全性。
Java的MD5加密算法:
import java.security.MessageDigest; public class TestMD5 { // MD5加密。32位 public static String str_toMD5(String inStr) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); return ""; } char[] charArray = inStr.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) byteArray[i] = (byte) charArray[i]; byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) { int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) hexValue.append("0"); hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } // 可逆的加密算法 public static String en_al(String inStr) { char[] a = inStr.toCharArray(); for (int i = 0; i < a.length; i++) { a[i] = (char) (a[i] ^ 't'); } String s = new String(a); return s; } // 加密后解密 public static String JM(String inStr) { char[] a = inStr.toCharArray(); for (int i = 0; i < a.length; i++) { a[i] = (char) (a[i] ^ 't'); } String k = new String(a); return k; } public static void main(String[] args) { String s = new String("123456"); System.out.println("原始:" + s); System.out.println("MD5后:" + str_toMD5(s)); System.out.println("MD5后再加密:" + en_al(str_toMD5(s))); System.out.println("解密为MD5后的:" + JM(en_al(str_toMD5(s)))); } }
借鉴于https://blog.csdn.net/love_moon821/article/details/79843845