zoukankan      html  css  js  c++  java
  • aes加解密

    小程序开发时常用aes解密 解密微信信息获取手机号  昵称
    package com.chiefclouds.crm1664.utils;

    import org.apache.tomcat.util.codec.binary.Base64;
    import org.bouncycastle.jce.provider.BouncyCastleProvider;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.NoSuchPaddingException;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    import java.io.UnsupportedEncodingException;
    import java.security.*;
    import java.security.spec.InvalidParameterSpecException;

    /**
    * AES-128-CBC 加密方式
    * 注:
    * AES-128-CBC可以自己定义“密钥”和“偏移量“。
    * AES-128是jdk自动生成的“密钥”。
    */
    public class AesCbcUtil {

    private static Logger logger = LoggerFactory.getLogger(AesCbcUtil.class);

    static{
    try{
    Security.addProvider(new BouncyCastleProvider());
    }catch(Exception e){
    e.printStackTrace();
    }
    }

    /**
    * AES解密
    *
    * @param data //密文,被加密的数据
    * @param key //秘钥
    * @param iv //偏移量
    * @param encodingFormat //解密后的结果需要进行的编码
    * @return
    * @throws Exception
    */
    public static String decrypt(String data, String key, String iv, String encodingFormat) throws Exception {
    // initialize();
    //被加密的数据
    byte[] dataByte = new Base64().decode(data);
    //加密秘钥
    byte[] keyByte = new Base64().decode(key);
    //偏移量
    byte[] ivByte = new Base64().decode(iv);

    try {
    // Provider BC = new BouncyCastleProvider();
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");

    SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");

    AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
    parameters.init(new IvParameterSpec(ivByte));

    cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
    byte[] resultByte = cipher.doFinal(dataByte);
    if (null != resultByte && resultByte.length > 0) {
    String result = new String(resultByte, encodingFormat);
    return result;
    }
    return null;
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    logger.error(e.getMessage(), e);
    } catch (NoSuchPaddingException e) {
    e.printStackTrace();
    logger.error(e.getMessage(), e);
    } catch (InvalidParameterSpecException e) {
    e.printStackTrace();
    logger.error(e.getMessage(), e);
    } catch (InvalidKeyException e) {
    e.printStackTrace();
    logger.error(e.getMessage(), e);
    } catch (InvalidAlgorithmParameterException e) {
    e.printStackTrace();
    logger.error(e.getMessage(), e);
    } catch (IllegalBlockSizeException e) {
    e.printStackTrace();
    logger.error(e.getMessage(), e);
    } catch (BadPaddingException e) {
    e.printStackTrace();
    logger.error(e.getMessage(), e);
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    logger.error(e.getMessage(), e);
    }

    return null;
    }

    }
    使用:
    String result = AesCbcUtil.decrypt(loginInfo.getEncryptedData(), loginInfo.getSessionKey(), loginInfo.getIv(), "UTF-8");
    JSONObject json = JSONObject.parseObject(result);
    System.err.println("解密信息= " + json);



  • 相关阅读:
    c#—— Task.FromResult 的使用
    libCurl的C++引用
    Mono Compatibility
    dos命令弹出对话框---Msg命令详解
    自解压的方式创建VC++程序的打包
    Microsoft Visual Studio 6.0 Enterprise Edition
    CRegKey 注册表操作
    数据库之 表与表之间的关系
    数据库之完整性约束
    数据库之数据类型
  • 原文地址:https://www.cnblogs.com/yxj808/p/14597036.html
Copyright © 2011-2022 走看看