唐山网站建设公司,成功的品牌推广案例分析,如何制作图片,网站有哪些风格首先先简单的介绍一下MD5 和 SHA 算法然后看一下在 java.security.MessageDigest (信息摘要包下) 如何分别实现 md5 加密 和 sha 加密最后在看一下 使用httpclient包 依赖下的 commons-codec-org. 包 下的apache.commons.codec.digest.DigestUtils 这个工具类 是如何快速…首先先简单的介绍一下MD5 和 SHA 算法然后看一下在 java.security.MessageDigest (信息摘要包下) 如何分别实现 md5 加密 和 sha 加密最后在看一下 使用httpclient包 依赖下的 commons-codec-org. 包 下的apache.commons.codec.digest.DigestUtils 这个工具类 是如何快速实现md5 和 SHA 加密的还有spring包下的org.springframework.util.DigestUtils; DigestUtils工具MD5 算法MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来经MD2、MD3和MD4发展而来。MD5用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法)主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值是杂凑算法的基础原理常用于文件校验。校验不管文件多大经过MD5后都能生成唯一的MD5值。MD5算法具有以下特点1、压缩性任意长度的数据算出的MD5值长度都是固定的。2、容易计算从原数据计算出MD5值很容易。3、抗修改性对原数据进行任何改动哪怕只修改1个字节所得到的MD5值都有很大区别。4、弱抗碰撞已知原数据和其MD5值想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。5、强抗碰撞想找到两个不同的数据使它们具有相同的MD5值是非常困难的。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外其中比较有名的还有sha-1、RIPEMD以及Haval等。MD5 是单向的 不可逆SHA算法安全哈希算法(Secure HashAlgorithm)主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(DigitalSignature Algorithm DSA)。对于长度小于2^64位的消息SHA1会产生一个160位的消息摘要。该算法经过加密专家多年来的发展和改进已日益完善并被广泛使用。该算法的思想是接收一段明文然后以一种不可逆的方式将它转换成一段(通常更小)密文也可以简单的理解为取一串输入码(称为预映射或信息)并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种指纹或是摘要所以对散列值的数字签名就可以视为对此明文的数字签名。就安全性而言 sha要比md5 安全md5 是 一个128位(16字节)的散列值(hash value)sha-1 是 160位 其余还有 sha2.....请参考java.security.MessageDigest (信息摘要包下) 如何分别实现 md5 加密 和 sha 加密packagecom.io.digest;importjava.math.BigInteger;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;/*** SHA md5 的 实现* 使用 java.security.MessageDiges*authorlqf**/public classTest01 {public static final String KEY_MD5 MD5;public static final String KEY_SHA SHA;public static voidmain(String[] args) {System.out.println(md5加密后的数据md5(123));System.out.println(sha加密后的数据SHA(123));}/*** 使用md5的算法进行加密*/public staticString md5(String data) {byte[] bytes01 null;byte[] bytes02 null;try{//返回实现指定摘要算法的MessageDigest对象。MessageDigest digest MessageDigest.getInstance(KEY_MD5);bytes01 data.getBytes(); //将字符串转为 字节数组digest.update(bytes01); //使用指定的字节数组更新摘要。 可以对这个字节数组设置偏移量 可以不写这个操作bytes02 digest.digest();//通过执行最后的操作(如填充 )来完成哈希计算。//上面的三步 可以用一步代替//bytes02digest.digest(data.getBytes());//可不不要 update 直接使用 digest(byte[] byte)的方法}catch(NoSuchAlgorithmException e1) {//TODO Auto-generated catch blocke1.printStackTrace();}String md5code new BigInteger(bytes02).toString(16); //转为 16进制数//如果生成数字未满32位需要前面补0for (int i 0; i 32 - md5code.length(); i) {md5code 0 md5code;}returnmd5code;}/*** SHA 加密*paramdata*return*/public staticString SHA(String data) {byte[] digest null;try{//和上面的步骤一模一样就是改一下 指定的算法 这里把几个步骤和一起了digest MessageDigest.getInstance(KEY_SHA).digest(data.getBytes());}catch(NoSuchAlgorithmException e) {//TODO Auto-generated catch blocke.printStackTrace();}String shacodenew BigInteger(1, digest).toString(32); //32 进制数字returnshacode;}}使用httpclient包 依赖下的 commons-codec-org. 包 下的apache.commons.codec.digest.DigestUtils 这个工具类 快速实现md5 和 SHA 加密的DigestUtils这个工具包 对 java包下的messageDigest 进行了 扩展和封装 使得加密算法 实现起来变得异常简单包的依赖结构通过这些方法 可以拿来即用这个是 Spring - core 下的 utils工具类 扩展的DigestUtils 工具 可以看出来 没有上面的哪一个强大 没有 sha不过值得注意的是 如果你要想用spring包下的 digestUtils工具的话 导包的时候一定要看清楚啊 不要和上面的路径弄混了 切记切记 最后 看一下 这俩个包的混合使用第一个是 spring的 第二个 是 commons的 你得出什么结论了吗 (#^.^#)