java 后台获取用户授权的电话号码
哈哈哈,获取手机号码出了一个bug,第一次获取反正不成功。第二次获取才成功。上网查资料有人说改jdk的,改什么什么的反正都贼麻烦,最后用到了BouncyCastle这个类解决了这个问题。先说一下哈,并不是所有的小程序都有权限可以获取手机号,个人的获取不了。要通过企业认证才行。
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
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.AlgorithmParameterSpec;
public class WXBizDataCrypt {
private static final Logger logger = LoggerFactory.getLogger(WXBizDataCrypt.class);
/**
* AES解密
*
* @param data //密文,被加密的数据,也就是sessionkey,这个sessionkey在我博客获取openId那里可以得到
* @param key //秘钥
* @param iv //偏移量
* @return
* @throws Exception
*/
static { try { Security.addProvider(new BouncyCastleProvider()); } catch (Exception e) { e.printStackTrace(); } }
public static String decrypt1(String data, String key, String iv) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException, NoSuchProviderException {
//被加密的数据
byte[] dataByte = Base64.decodeBase64(data);
//加密秘钥
byte[] keyByte = Base64.decodeBase64(key);
//偏移量
byte[] ivByte = Base64.decodeBase64(iv);
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivByte);
SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
return new String(cipher.doFinal(dataByte),"UTF-8");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
logger.info("BadPaddingException:"+e.getMessage()+"更换填充方式");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
return new String(cipher.doFinal(dataByte), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
}
//调用
String result = WXBizDataCrypt.decrypt1(encryptedData, sessionKey, iv);
//存入map
if (!StringUtils.isEmpty(result) && result.length() > 0) {
map.put("phoneNumber", json.getString("phoneNumber"));
}
小女子不才期望得到大佬的批评指正。嘿嘿,其实我是男的。
想要maven依赖的伙计可以直接评论哈。
浙公网安备 33010602011771号