zoukankan      html  css  js  c++  java
  • 小程序java解密

            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcprov-jdk16</artifactId>
                <version>1.46</version>
            </dependency>
    package com.qmtt.service;
    
    import java.security.AlgorithmParameters;
    import java.security.Security;
    import java.util.Arrays;
    import java.util.Base64;
    import java.util.Map;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    import org.bouncycastle.jce.provider.BouncyCastleProvider;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Service;
    
    import com.qmtt.tools.JsonUtils;
    
    @Service
    public class WxService {
        private static final Logger log = LoggerFactory.getLogger(WxService.class);
        @Autowired
        RedisTemplate redisTemplate;
    
        @Autowired
        QuestionService questionService;
    
        public String getGroupid(String openid, String encryptedData, String iv) {
            String key = redisTemplate.opsForValue().get("sessionKey_" + openid).toString();
            log.info("密钥:<{}>", key);
            Base64.Decoder decoder = Base64.getDecoder();
            byte[] dataByte = decoder.decode(encryptedData);
            byte[] keyByte = decoder.decode(key);
            byte[] ivByte = decoder.decode(iv);
            try {
                // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
                int base = 16;
                if (keyByte.length % base != 0) {
                    int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
                    byte[] temp = new byte[groups * base];
                    Arrays.fill(temp, (byte) 0);
                    System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
                    keyByte = temp;
                }
                // 初始化
                Security.addProvider(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, "UTF-8");
                    log.info(result);
                    Map map = JsonUtils.json2map(result);
                    String gid = map.get("openGId").toString();
                    questionService.addGroup(openid, gid);
                    return gid;
                }
            } catch (Exception e) {
                log.error("", e);
            }
            return null;
        }
    
    }

    有追求,才有动力!

    向每一个软件工程师致敬!

    by wujf

    mail:921252375@qq.com

  • 相关阅读:
    自定义Web框架
    Python四种实现单例模式的方法
    popup的简单应用举例
    前端框架之BootStrap的简单介绍
    前端之JQuery:JQuery扩展和事件
    前端之JQuery:JQuery文档操作
    前端之JQuery:JQuery属性操作
    前端之JQuery:JQuery基本语法
    MinerDB.java 数据库工具类
    MinerConstanits.java 常量类
  • 原文地址:https://www.cnblogs.com/wujf/p/8434905.html
Copyright © 2011-2022 走看看