您的位置:首页 > 编程语言 > Go语言

密码、文件MD5加密,密码sha256、sha384、sha512Hex等加密

2012-03-27 10:18 393 查看
密码、文件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")));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息