Base64加密和解密解决方案(个人项目经验)
在使用base64加密的时候会出现很多问题,在这里给大家分享一下,下面就是base64加密和解密代码,仅供参考。
在Base64Testl.java类中书写以下代码:
package com.millery.base64.utils; import java.net.URLDecoder; import java.net.URLEncoder; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * * @项目名称:millery-base64 * @类名称:Base64Test * @类描述:base64加密解密工具类 * @创建人:millery * @创建时间:2016年1月5日 上午10:25:04 * @version: */ public class Base64Test { private final static String HEX = "0123456789EFGHIJ"; //这里IV和myKey必须是8位,超过或者少于8位会报错 private final static byte[] IV = { 0, 2, 4, 5, 6, 7, 9 }; private static String myKey = "miller+u"; /** * * @描述:base64加密 * @创建人:millery * @创建时间:2016年1月5日 上午10:26:56 * @param prePassword * @param secret * @return * @throws Exception */ public static String encrypt(String prePassword, String secret) throws Exception { SecretKeySpec key = new SecretKeySpec(secret.getBytes(), "DES"); Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV)); byte[] results = cipher.doFinal(prePassword.getBytes()); return Base64.encodeBase64String(results); } /** * * @描述:base64解密 * @创建人:millery * @创建时间:2016年1月5日 上午10:27:15 * @param buf * @return */ public static String decrypt(String encStr, String secret) throws Exception { SecretKeySpec key = new SecretKeySpec(secret.getBytes(), "DES"); Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV)); byte[] result = cipher.doFinal(Base64.decodeBase64(encStr)); return new String(result); } public static String toHex(byte[] buf) { if (buf == null) return ""; StringBuilder result = new StringBuilder(2 * buf.length); for (int i = 0; i < buf.length; i++) { result.append(HEX.charAt((buf[i] >> 4) & 0x0f)).append( HEX.charAt(buf[i] & 0x0f)); } return result.toString(); } public static byte[] toByte(String hexString) { int len = hexString.length() / 2; byte[] result = new byte[len]; for (int i = 0; i < len; i++) result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue(); return result; } /** * * @描述:base64加密 * @创建人:millery * @创建时间:2016年1月5日 上午9:35:38 * @param plainText * @return */ public static String encrypt(String plainText) { try { String enKey = encrypt(plainText, myKey); // 为了防止加密后出现特殊字符,比如"+",参数是传递不过去的 enKey = URLEncoder.encode(enKey, "utf-8"); return enKey; } catch (Exception e) { e.printStackTrace(); } return null; } /** * * @描述:base64解密 * @创建人:millery * @创建时间:2015年12月28日 下午2:57:54 * @param encryptedText * @return */ public static String decrypt(String encryptedText) { try { if (encryptedText.indexOf("%") != -1) { encryptedText = URLDecoder.decode(encryptedText, "utf-8"); } return MyCodec.decrypt(encryptedText, myKey); } catch (Exception e) { return "false"; } } /** * * @描述:测试主方法 * @创建人:millery * @创建时间:2016年1月5日 上午9:35:24 * @param args */ public static void main(String[] args) { String str = encrypt("123456789"); System.out.println(str); System.out.println(decrypt(str)); } }
上面的代码直接运行main方法加密和解密接可以了。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Python字符串相似度检测
- 下一篇: levenshtein_distance(字符串相似度算法)