免费国产欧美国日产_少妇AV一区二区三区无码_蜜桃精品av无码喷奶水小说_jk18禁网站视频_精产国品一二三级产品区别_被夫の上司に犯波多野结衣_78m成人手机免费看_最爽最刺激18禁视频_偷偷色噜狠狠狠狠的777米奇

易優(yōu)GEO 重磅上線 ~ 一站式GEO優(yōu)化工具,讓豆包、文心一言、DeepSeek 在回答中主動(dòng)推薦你的品牌,搶占AI流量入口!  點(diǎn)擊查看

小程序模板網(wǎng)

微信小程序?qū)崙?zhàn)開(kāi)發(fā)系列《四》用戶信息encryptedData

發(fā)布時(shí)間:2018-02-01 18:28 所屬欄目:小程序開(kāi)發(fā)教程

之前做過(guò)一個(gè)版本是根據(jù)encryptData和Session_key解密得到完整的用戶信息(包含union_id)的方法去獲取用戶信息,由于小程序升級(jí),如今需要廢棄encryptData的方式去獲取用戶信息,改成使用encryptedData的方式獲取用戶信息。

新的數(shù)據(jù)解密方法 
接口如果涉及敏感數(shù)據(jù)(如wx.getUserInfo當(dāng)中的 openId 和unionId ),接口的明文內(nèi)容將不包含這些敏感數(shù)據(jù)。開(kāi)發(fā)者如需要獲取敏感數(shù)據(jù),需要對(duì)接口返回的加密數(shù)據(jù)( encryptedData )進(jìn)行對(duì)稱解密。 解密算法如下:

對(duì)稱解密使用的算法為 AES-128-CBC,數(shù)據(jù)采用PKCS#7填充。
對(duì)稱解密的目標(biāo)密文為 Base64_Decode(encryptedData),
對(duì)稱解密秘鑰 aeskey = Base64_Decode(session_key), aeskey 是16字節(jié)
對(duì)稱解密算法初始向量 iv 會(huì)在數(shù)據(jù)接口中返回。 

微信官方提供了多種編程語(yǔ)言的示例代碼。每種語(yǔ)言類型的接口名字均一致。調(diào)用方式可以參照示例。

另外,為了應(yīng)用能校驗(yàn)數(shù)據(jù)的有效性,我們會(huì)在敏感數(shù)據(jù)加上數(shù)據(jù)水印( watermark )

{
    "openId": "OPENID",
    "nickName": "NICKNAME",
    "gender": GENDER,
    "city": "CITY",
    "province": "PROVINCE",
    "country": "COUNTRY",
    "avatarUrl": "AVATARURL",
    "unionId": "UNIONID",
    "watermark":
    {
        "appid":"APPID",
        "timestamp":TIMESTAMP
    }
}

總的來(lái)說(shuō)還是原來(lái)的算法,還是原來(lái)的邏輯結(jié)構(gòu),不同的是解密方式,以前是通過(guò)session_key得到iv,現(xiàn)如今是直接從前臺(tái)接口處得到iv來(lái)解密,所改變的也只是傳輸?shù)臄?shù)據(jù)

@RequestMapping(value = "/web/wechatapp/jscode2session", method = RequestMethod.POST)
    @ResponseBody
    public String getSessionByCode(@RequestBody String jsonStr, HttpServletRequest request) {
        JSONObject jsonObj = JSONObject.fromObject(jsonStr);
        String code = (String) jsonObj.get("code");
        JSONObject wechatAppUserInfo = jsonObj.getJSONObject("wechatAppUserInfo");
        String encryptedData = (String) wechatAppUserInfo.get("encryptedData");
        String iv = (String) wechatAppUserInfo.get("iv");

        WechatUserInfo wechatUserInfo = wechatAppManager.doOAuth(code, encryptedData, iv);
        if (wechatUserInfo == null) {
            throw new BusinessException(BusinessException.Code.WECHAT_OAUTH_ERROR, "微信小程序授權(quán)失?。。。?quot;);
        }
        HttpSession session = request.getSession(true);
        User user = wechatUserInfo.getUser();
        logger.debug("微信小程序用戶 union id: {}, 對(duì)應(yīng)車車用戶{}", wechatUserInfo.getUnionid(), user.getId());
        session.setAttribute(WebConstants.SESSION_KEY_USER, CacheUtil.doJacksonSerialize(user));
        ClientTypeUtil.cacheClientType(request, ClientType.WE_CHAT_APP);
        return session.getId();
    }

解密的算法

public static byte[] decrypt(String dataStr,String keyStr, String ivStr) throws Exception{
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        byte[] encryptedData = Base64.decode(dataStr);
        byte[] keyBytes = Base64.decode(keyStr);
        AlgorithmParameters iv = WechatAppDecryptor.generateIV(Base64.decode(ivStr));
        Key key = convertToKey(keyBytes);
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        //設(shè)置為解密模式
        cipher.init(Cipher.DECRYPT_MODE, key,iv);
        return cipher.doFinal(encryptedData);
    }


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開(kāi)源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.szcjxy.com/wxmini/doc/course/21401.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢: 點(diǎn)擊咨詢
在線客服