在抖音开放平台里有这么一个接口是获取抖音用户的手机号的,在用户授权之后会得到一个由base64的加密的字符串,我们要想知道这个字符串代表的手机号是多少,就必须要进行解密。
一下是抖音开放平台给出的示例。然而我个人看不懂这是什么代码写的,然后再网上东拼西凑,给出大家一个java版的解密demo
根据抖音官方说的,根据自己申请的应用clientSecret =>(
解密手机号,使用Aes算法解密,秘钥是clientSecret, 向量lv 是clientSecret前16字节
)
去解密自己所得的用户手机加密串
官方说的这句( 向量lv 是clientSecret前16字节)=> 意思是说根据自己的应用clientSecret 从第一位开始数到第16位截取出来获取到这一段字符串的byte[]数组去解密
一下是java版的解密demo--------
public class climbHtml {
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, UnsupportedEncodingException {
System.out.println(decryptAES("B1/yGfhuiewjwpoCMEw==".getBytes(), "uj2fhiso3wdu4ghduhf85eds", "uj2fhiso3wdu4gh"));
}
/**
* 解密
* @param content: 待解密内容,是 BASE64 编码后的字节数组
* @param secretKeyStr: 解密使用的 AES 密钥,BASE64 编码后的字符串
* @param iv: 初始化向量,长度 16 字节,16*8 = 128 位
* @return 解密后的明文,直接返回经 UTF-8 编码转换后的明文
*/
public static String decryptAES(byte[] content, String secretKeyStr, String iv) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, UnsupportedEncodingException {
// 密文进行 BASE64 解密处理
byte[] contentDecByBase64 = Base64.getDecoder().decode(content);
// 获得一个 SecretKeySpec
// SecretKeySpec secretKeySpec = new SecretKeySpec(Base64.getDecoder().decode(secretKeyStr), "AES");
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKeyStr.getBytes(), "AES");
// 获得加密算法实例对象 Cipher
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); //"算法/模式/补码方式"
// 获得一个初始化 IvParameterSpec
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
// 根据参数初始化算法
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
// 解密
return new String(cipher.doFinal(contentDecByBase64), "utf8");
}
}