我是靠谱客的博主 酷炫高跟鞋,最近开发中收集的这篇文章主要介绍java腾讯云获取签名java腾讯云通信(获取签名),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

签名

  • java腾讯云通信(获取签名)

java腾讯云通信(获取签名)

private final static String privStr = "私钥(腾讯会有一个公钥和私钥,此处用的是私钥)";
public static final String identifier = "管理员账号";
public final static long skdAppid = "腾讯云APPID";
/**
* identifier用的是管理员
* @return
*/
public static String GetSign() {
GenTLSSignatureResult result = null;
try{
//生成签名
result = GenTLSSignatureEx(skdAppid, identifier, privStr);
if (0 == result.urlSig.length()) {
System.out.println("GenTLSSignatureEx failed: " + result.errMessage);
return null;
}
} catch (Exception e) {
e.printStackTrace();
}
return result.urlSig;
}
/**
* @brief 生成 tls 票据,精简参数列表,有效期默认为 180 天
* @param skdAppid 应用的 sdkappid
* @param identifier 用户 id
* @param privStr 私钥文件内容
* @return
* @throws IOException
*/
private static
GenTLSSignatureResult GenTLSSignatureEx(long skdAppid, String identifier, String privStr) throws IOException {
return GenTLSSignatureEx(skdAppid, identifier, privStr, 3600 * 24 * 180);
}
/**
* @brief 生成 tls 票据,精简参数列表
* @param skdAppid 应用的 sdkappid
* @param identifier 用户 id
* @param privStr 私钥文件内容
* @param expire 有效期,以秒为单位,推荐时长一个月
* @return
* @throws IOException
*/
private static
GenTLSSignatureResult GenTLSSignatureEx(long skdAppid, String identifier, String privStr, long expire) throws IOException {
GenTLSSignatureResult result = new GenTLSSignatureResult();
Security.addProvider(new BouncyCastleProvider());
Reader reader = new CharArrayReader(privStr.toCharArray());
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
PEMParser parser = new PEMParser(reader);
Object obj = parser.readObject();
parser.close();
PrivateKey privKeyStruct = converter.getPrivateKey((PrivateKeyInfo) obj);
String jsonString = "{"
+ ""TLS.account_type":"" + 0 +"","
+""TLS.identifier":"" + identifier +"","
+""TLS.appid_at_3rd":"" + 0 +"","
+""TLS.sdk_appid":"" + skdAppid +"","
+""TLS.expire_after":"" + expire +"","
+""TLS.version": "201512300000""
+"}";
String time = String.valueOf(System.currentTimeMillis()/1000);
String SerialString =
"TLS.appid_at_3rd:" + 0 + "n" +
"TLS.account_type:" + 0 + "n" +
"TLS.identifier:" + identifier + "n" +
"TLS.sdk_appid:" + skdAppid + "n" +
"TLS.time:" + time + "n" +
"TLS.expire_after:" + expire +"n";
try {
//Create Signature by SerialString
Signature signature = Signature.getInstance("SHA256withECDSA", "BC");
signature.initSign(privKeyStruct);
signature.update(SerialString.getBytes(Charset.forName("UTF-8")));
byte[] signatureBytes = signature.sign();
String sigTLS = Base64.encodeBase64String(signatureBytes);
//Add TlsSig to jsonString
JSONObject jsonObject= JSONObject.parseObject(jsonString);
jsonObject.put("TLS.sig", (Object)sigTLS);
jsonObject.put("TLS.time", (Object)time);
jsonString = jsonObject.toString();
//compression
Deflater compresser = new Deflater();
compresser.setInput(jsonString.getBytes(Charset.forName("UTF-8")));
compresser.finish();
byte [] compressBytes = new byte [512];
int compressBytesLength = compresser.deflate(compressBytes);
compresser.end();
String userSig = new String(base64_url.base64EncodeUrl(Arrays.copyOfRange(compressBytes,0,compressBytesLength)));
result.urlSig = userSig;
}
catch(Exception e)
{
e.printStackTrace();
result.errMessage = "generate usersig failed";
}
return result;
}

最后

以上就是酷炫高跟鞋为你收集整理的java腾讯云获取签名java腾讯云通信(获取签名)的全部内容,希望文章能够帮你解决java腾讯云获取签名java腾讯云通信(获取签名)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部