密码、文件MD5加密,密码sha256、sha384、sha512Hex等加密
使用时请先导入commons-codec-1.5.jar包
package com.pdsu.crm.utils; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.binary.Base64OutputStream; import org.apache.commons.codec.digest.DigestUtils; /** * 类说明:密码的加密与解密 * * @author 作者: LiuJunGuang * @version 创建时间:2011-5-19 下午11:07:09 */ public class PasswordEncode { public final static String MD5 = "MD5"; public final static String NONE = "NONE"; public final static String SHA_256 = "SHA-256"; public final static String SHA_512 = "SHA-512"; public final static String SHA_384 = "SHA-384"; /** * 加密文件算法 * * @param filename * 需要加密的文件名 * @param algorithm * 加密算法名 */ public static void digestFile(String filename, String algorithm) { byte[] b = new byte[1024 * 4]; int len = 0; FileInputStream fis = null; FileOutputStream fos = null; try { MessageDigest md = MessageDigest.getInstance(algorithm); fis = new FileInputStream(filename); while ((len = fis.read(b)) != -1) { md.update(b, 0, len); } byte[] digest = md.digest(); StringBuffer fileNameBuffer = new StringBuffer(128).append(filename).append(".").append(algorithm); fos = new FileOutputStream(fileNameBuffer.toString()); OutputStream encodedStream = new Base64OutputStream(fos); encodedStream.write(digest); encodedStream.flush(); encodedStream.close(); } catch (Exception e) { System.out.println("Error computing Digest: " + e); } finally { try { if (fis != null) fis.close(); } catch (Exception ignored) { } try { if (fos != null) fos.close(); } catch (Exception ignored) { } } } /** * 加密密码算法 * * @param pass * 需要加密的原始密码 * @param algorithm * 加密算法名称 * @return 加密后的密码 * @throws NoSuchAlgorithmException * 当加密算法不可用时抛出此异常 */ public static String digestString(String password, String alg) throws NoSuchAlgorithmException { String newPass; if (alg == null || MD5.equals(alg)) { newPass = DigestUtils.md5Hex(password); } else if (NONE.equals(alg)) { newPass = password; } else if (SHA_256.equals(alg)) { newPass = DigestUtils.sha256Hex(password); } else if (SHA_384.equals(alg)) { newPass = DigestUtils.sha384Hex(password); } else if (SHA_512.equals(alg)) { newPass = DigestUtils.sha512Hex(password); } else { newPass = DigestUtils.shaHex(password); } return newPass; } /** * 加密密码算法,默认的加密算法是MD5 * * @param password * 未加密的密码 * @return String 加密后的密码 */ public static String digestPassword(String password) { try { if (password != null && !"".equals(password)) { return digestString(password, MD5); } else return null; } catch (NoSuchAlgorithmException nsae) { throw new RuntimeException("Security error: " + nsae); } } /** * 判断密码是不是相等,默认的加密算法是MD5 * * @param beforePwd * 要判断的密码 * @param afterPwd * 加密后的数据库密码 * @return Boolean true 密码相等 */ public static boolean isPasswordEnable(String beforePwd, String afterPwd) { if (beforePwd != null && !"".equals(beforePwd)) { String password = digestPassword(beforePwd); return afterPwd.equals(password); } else return false; } public static void main(String[] args) throws NoSuchAlgorithmException { System.out.println(PasswordEncode.digestPassword("123456")); System.out.println(PasswordEncode.digestString("123456", PasswordEncode.MD5)); PasswordEncode.digestFile("C:\\Users\\user\\Desktop\\PasswordEncode.java", PasswordEncode.SHA_512); System.out.println(PasswordEncode.isPasswordEnable("123456", PasswordEncode.digestPassword("123456"))); } }