java 幾種加密 解密方法。
- 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 systemcookie@gmail.com
- *
- */
- public class EncryptUtil {
- private static final String UTF8 = "utf-8";
- //定義 加密算法,可用 DES,DESede,Blowfish
- private static final String ALGORITHM_DESEDE = "DESede";
- /**
- * MD5數字簽名
- *
- * @param src
- * @return
- * @throws Exception
- */
- public String md5Digest(String src) throws Exception {
- // 定義數字簽名方法, 可用:MD5, SHA-1
- MessageDigest 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;
- }
- }
歡迎關注本站公眾號,獲取更多信息