## 一、Java实现微信加密数据解密算法 > 在微信小程序开发过程中,如何拿到的用户的手机号信息? ``` import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import javax.validation.constraints.NotNull; import java.security.Security; import java.security.spec.AlgorithmParameterSpec; /** * @Author xiang * @CreatTime 2020/11/18 * @Describe */ @Slf4j public class AESUtils { // 加密模式 private static final String ALGORITHM = "AES/CBC/PKCS7Padding"; private static final String CHARSET_NAME = "UTF-8"; private static final String AES_NAME = "AES"; //解决java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Padding static { Security.addProvider(new BouncyCastleProvider()); } /** * 解密 * * @param content 目标密文 * @param key 秘钥 * @param iv 偏移量 * @return */ public static String decrypt(@NotNull String content, @NotNull String key, @NotNull String iv) { try { Cipher cipher = Cipher.getInstance(ALGORITHM); byte[] sessionKey = java.util.Base64.getDecoder().decode(key); SecretKeySpec keySpec = new SecretKeySpec(sessionKey, AES_NAME); byte[] ivByte = java.util.Base64.getDecoder().decode(iv); AlgorithmParameterSpec paramSpec = new IvParameterSpec(ivByte); cipher.init(Cipher.DECRYPT_MODE, keySpec, paramSpec); return new String(cipher.doFinal(Base64.decodeBase64(content)), CHARSET_NAME); } catch (Exception e) { log.error("解密失败:{}", e); e.printStackTrace(); } return StringUtils.EMPTY; } public static void main(String[] args) { //接口传入的参数 String appid = "wx4f4bc4dec97d474b"; String sessionKey = "tiihtNczf5v6AKRyjwEUhQ=="; String encryptedData = "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew=="; String iv = "r7BXXKkLb8qrSNn05n0qiA=="; String decrypt = AESUtils.decrypt(encryptedData, sessionKey, iv); System.out.println("解密后:" + decrypt); } } ``` 解析结果: ``` { "openId": "oGZUI0egBJY1zhBYw2KhdUfwVJJE", "nickName": "Band", "gender": 1, "language": "zh_CN", "city": "Guangzhou", "province": "Guangdong", "country": "CN", "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0", "unionId": "ocMvos6NjeKLIBqg5Mr9QjxrP1FA", "watermark": { "timestamp": 1477314187, "appid": "wx4f4bc4dec97d474b" } } ``` [原文阅读](https://blog.csdn.net/cdliker/article/details/109775914)