MD5, SHA-1, BASE64, 3DES加解密方法Java实现
最近经常用一些加解密方法,在此做个总结,日后再使用也方便了。
其中MD5、SHA-1为数字签名。
BASE64, 3DES为可逆加密方法。
import java.security.MessageDigest;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;/** * Java 加解密工具类 * * @author mosesxin@gmail.com * */public class EncryptUtil {private static final String UTF8 = "utf-8";//定义 加密算法,可用 DES,DESede,Blowfishprivate static final String ALGORITHM_DESEDE = "DESede";/** * MD5数字签名 * * @param src * @return * @throws Exception */public String md5Digest(String src) throws Exception {// 定义数字签名方法, 可用:MD5, SHA-1MessageDigest md = MessageDigest.getInstance("MD5");byte[] b = md.digest(src.getBytes(UTF8));return this.byte2HexStr(b);}/** * BASE64 加密 * * @param src * @return * @throws Exception */public String base64Encoder(String src) throws Exception {BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(src.getBytes(UTF8));}/** * BASE64解密 * * @param dest * @return * @throws Exception */public String base64Decoder(String dest) throws Exception {BASE64Decoder decoder = new BASE64Decoder();return new String(decoder.decodeBuffer(dest), UTF8);}/** * 3DES加密 * * @param src * @param key * @return * @throws Exception */public String desedeEncoder(String src, String key) throws Exception {SecretKey secretKey = new SecretKeySpec(build3DesKey(key), ALGORITHM_DESEDE);Cipher cipher = Cipher.getInstance(ALGORITHM_DESEDE);cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] b = cipher.doFinal(src.getBytes(UTF8));return byte2HexStr(b);}/** * 3DES解密 * * @param dest * @param key * @return * @throws Exception */public String desedeDecoder(String dest, String key) throws Exception {SecretKey secretKey = new SecretKeySpec(build3DesKey(key), ALGORITHM_DESEDE);Cipher cipher = Cipher.getInstance(ALGORITHM_DESEDE);cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] b = cipher.doFinal(str2ByteArray(dest));return new String(b, UTF8);}/** * 字节数组转化为大写16进制字符串 * * @param b * @return */private String byte2HexStr(byte[] b) {StringBuilder sb = new StringBuilder();for (int i = 0; i < b.length; i++) {String s = Integer.toHexString(b[i] & 0xFF);if (s.length() == 1) {sb.append("0");}sb.append(s.toUpperCase());}return sb.toString();}/** * 字符串转字节数组 * * @param s * @return */private byte[] str2ByteArray(String s) {int byteArrayLength = s.length()/2;byte[] b = new byte[byteArrayLength];for (int i = 0; i < byteArrayLength; i++) {byte b0 = (byte) Integer.valueOf(s.substring(i*2, i*2+2), 16).intValue();b[i] = b0;}return b;}/** * 构造3DES加解密方法key * * @param keyStr * @return * @throws Exception */private byte[] build3DesKey(String keyStr) throws Exception {byte[] key = new byte[24];byte[] temp = keyStr.getBytes(UTF8);if (key.length > temp.length) {System.arraycopy(temp, 0, key, 0, temp.length);} else {System.arraycopy(temp, 0, key, 0, key.length);}return key;}}
1 楼 hanmiao 2011-07-16 注意到楼主的加密解密过程中用到了原sun公司的几个JAR包,不知道在哪里可以找到,如果楼主能够共享出来就更好了,连搜索都省了。 2 楼 moses3017 2011-07-30 hanmiao 写道注意到楼主的加密解密过程中用到了原sun公司的几个JAR包,不知道在哪里可以找到,如果楼主能够共享出来就更好了,连搜索都省了。
JDK自带的