Java实现对称解密小程序用户信息(AES-128-CBC算法)

来源:互联网 发布:超级淘宝系统下载 编辑:程序博客网 时间:2024/06/18 13:27
import java.security.Key;import java.security.NoSuchAlgorithmException;import java.security.Security;import java.util.Arrays;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;import org.bouncycastle.jce.provider.BouncyCastleProvider;public class DecryptUtil {// 算法名称final String KEY_ALGORITHM = "AES";// 加解密算法/模式/填充方式final String algorithmStr = "AES/CBC/PKCS7Padding";//private Key key;private Cipher cipher;public void init(byte[] keyBytes) {// 如果密钥不足16位,那么就补足. 这个if 中的内容很重要int base = 16;if (keyBytes.length % base != 0) {int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0);byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length);keyBytes = temp;}// 初始化Security.addProvider(new BouncyCastleProvider());// 转化成JAVA的密钥格式key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);try {// 初始化ciphercipher = Cipher.getInstance(algorithmStr);} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchPaddingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 解密方法 * * @param encryptedData *            要解密的字符串 * @param keyBytes *            解密密钥 * @return */public byte[] decrypt(String encryptedDataStr, String keyBytesStr, String ivStr) {byte[] encryptedText = null;byte[] encryptedData = null;byte[] sessionkey = null;byte[] iv = null;try {sessionkey = Base64.decodeBase64(keyBytesStr);encryptedData = Base64.decodeBase64(encryptedDataStr);iv = Base64.decodeBase64(ivStr);init(sessionkey);cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));encryptedText = cipher.doFinal(encryptedData);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return encryptedText;}}

外部只需要使用这个类中的解密方法就OK

decryptUtil = new DecryptUtil();byte[] data = decryptUtil.decrypt(encryptedData, keys, iv);String dataStr = null;try {dataStr = new String(data,"utf-8");// 根据解密算法自行解密(输入参数为appId,sessionKey,encryptedData,iv,返回一个jsonObj)//System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + dataStr);} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}


原创粉丝点击