美文网首页
获得session_key和openId(加解密、签名系列)

获得session_key和openId(加解密、签名系列)

作者: 蛋皮皮652 | 来源:发表于2020-08-05 17:21 被阅读0次

    微信小程序免登录的验证步骤

    验证步骤:

    1.首先获取微信的unionId

    2.通unionId查询账户。

    3.如果查询到,则生成token返回给 小程序 (新增账户信息也要返回过去)

    4.如果没有查询到,则将状态码 变成false 返回。  让小程序跳到绑定账号页面

    以下是接口中具体的操作步骤:

    1.调用wx.login()接口就可获取登录凭证(js_code)

    2.去微信公众平台查看appid和appsecret

    3.利用以下链接替换appid,secret,js_code后调用即可获取

    https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

    写一个接口执行小程序免登录状态

    传参 code,通过1获取的js_code,

    encryptedData  敏感数据在内的完整用户信息的加密数据

    iv   偏移量

    通过解密算法即可获取如下数据

    将你需要的数据set到你的返回实体中就可以了

    以下是解密工具类的具体实现

    /**

    * @Author: wuyue

    * @Date: 2020/8/3 18:20

    * AES-128-CBC 加密方式

    * 注:

    * AES-128-CBC可以自己定义“密钥”和“偏移量“。

    * AES-128是jdk自动生成的“密钥”。

    */

    public class AesCbcUtil {

    static {

    //BouncyCastle是一个开源的加解密解决方案,主页在http://www.bouncycastle.org/

            Security.addProvider(new BouncyCastleProvider());

        }

    /**

        * AES解密

        *

        * @param data      //密文,被加密的数据

        * @param key      //秘钥

        * @param iv      //偏移量

        * @param encodingFormat //解密后的结果需要进行的编码

        * @return

        * @throws Exception

    */

        public static Stringdecrypt(String data, String key, String iv, String encodingFormat)throws Exception {

    //    initialize();

            String result ="";

            //被加密的数据

            byte[] dataByte = Base64.decodeBase64(data);

            //加密秘钥

            byte[] keyByte = Base64.decodeBase64(key);

            //偏移量

            byte[] ivByte = Base64.decodeBase64(iv);

            // 如果密钥不足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;

            }

    // 初始化

            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) {

    result =new String(resultByte, "UTF-8");

            }

    return result;

        }

    具体调用方法

    喜欢请微信扫码关注公众号

    相关文章

      网友评论

          本文标题:获得session_key和openId(加解密、签名系列)

          本文链接:https://www.haomeiwen.com/subject/wuqbrktx.html