腾讯云通信UserSig生成.Net实现
腾讯云通信后台生成usersig只有java实现代码。以下是根据java代码转换为net实现,java版GitHub地址:https://github.com/TencentVideoCloudMLVBDev/usersig_server_source/blob/master/java/WebRTCSigApi.java。
需要使用类库:Portable.BouncyCastle,SharpZipLib,直接从nuget下载安装即可。
另外我正在实现腾讯云IM服务端Sdk .NetCore版本,github地址:https://github.com/yangxuilyx/QCloudIM.AspNetCore
public class TlsSignature
{
/// <summary>
/// 获取用户sign
/// </summary>
/// <param name="appid">appid</param>
/// <param name="privateKey">私钥</param>
/// <param name="userid">用户名</param>
/// <param name="expire">userSig有效期,出于安全考虑建议为300秒,您可以根据您的业务场景设置其他值。</param>
/// <returns>生成的userSig</returns>
public static string GenUserSig(string appid, string privateKey, string userid, int expire)
{
var time = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
String serialString =
"TLS.appid_at_3rd:" + + "\n" +
"TLS.account_type:" + + "\n" +
"TLS.identifier:" + userid + "\n" +
"TLS.sdk_appid:" + appid + "\n" +
"TLS.time:" + time + "\n" +
"TLS.expire_after:" + expire + "\n"; var sign = Convert.ToBase64String(Sign(privateKey, Encoding.UTF8.GetBytes(serialString))); String jsonString = "{"
+ "\"TLS.account_type\":\"" + + "\","
+ "\"TLS.identifier\":\"" + userid + "\","
+ "\"TLS.appid_at_3rd\":\"" + + "\","
+ "\"TLS.sdk_appid\":\"" + appid + "\","
+ "\"TLS.expire_after\":\"" + expire + "\","
+ "\"TLS.sig\":\"" + sign + "\","
+ "\"TLS.time\":\"" + time + "\","
+ "\"TLS.version\": \"201512300000\""
+ "}"; var compressBytes = Compress(Encoding.UTF8.GetBytes(jsonString)); var userSign = Base64UrlEncode(compressBytes);
return userSign;
} private static byte[] Compress(byte[] data)
{
Deflater mDeflater = new Deflater();
mDeflater.SetInput(data);
mDeflater.Finish();
byte[] compressBytes = new byte[];
int compressBytesLength = mDeflater.Deflate(compressBytes); mDeflater.Flush(); return compressBytes.Take(compressBytesLength).ToArray();
} /// <summary>
/// ECDSA-SHA256签名
/// </summary>
/// <param name="privateKey">私钥</param>
/// <param name="data">需要签名的数据</param>
/// <returns></returns>
private static byte[] Sign(string privateKey, byte[] data)
{
ECPrivateKeyParameters privateKeyParam = (ECPrivateKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey)); var signer = SignerUtilities.GetSigner("SHA256withECDSA");
signer.Init(true, privateKeyParam);
signer.BlockUpdate(data, , data.Length); return signer.GenerateSignature();
} /// <summary>
/// 验证ECDSA-SHA256签名
/// </summary>
/// <param name="publicKey">公钥</param>
/// <param name="data">需要验证的数据原文</param>
/// <param name="sig">需要验证的签名</param>
/// <returns>true:验证成功 false:验证失败</returns>
public static bool Verify(string publicKey, byte[] data, byte[] sig)
{
ECPublicKeyParameters publicKeyParam = (ECPublicKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey)); var signer = SignerUtilities.GetSigner("SHA256withECDSA");
signer.Init(false, publicKeyParam);
signer.BlockUpdate(data, , data.Length); return signer.VerifySignature(sig); } private static string Base64UrlEncode(byte[] data)
{
return Convert.ToBase64String(data).Replace('+', '*').Replace('/', '-')
.Replace('=', '_');
} private static string Base64UrlDecode(byte[] data)
{
return Convert.ToBase64String(data).Replace('*', '+').Replace('-', '/')
.Replace('_', '=');
}
}
腾讯云通信UserSig生成.Net实现的更多相关文章
- 服务端搭建——腾讯云通信(IM)
前言 在手机app中因为需要即时聊天功能,在项目采用腾讯云通信服务.如下流程图: 当手机端拿到签名后,就可登录IM,使用im提供的sdk收发信息. 准备工作 1.在腾讯云注册获取appid 2.申请开 ...
- 腾讯云通信WebIM事件回调的坑~
最近在开过工作中用到了腾讯IM的功能,由于业务的需要主要使用到了: 1.loginInfo 用户登录,用户信息 2.getRecentContactList 获得最近联系人 3.getLastGrou ...
- 腾讯通信云服务端使用心得,腾讯云IM
腾讯通信云服务端使用心得 1.腾讯通信服务入口并创建应用 方便使用保留url地址 : https://cloud.tencent.com/product/im 注册账号腾讯云账号->通过审核 ...
- 【手把手教程】uniapp + vue 从0搭建仿微信App聊天应用:腾讯云TXIM即时通讯的最佳实践
基于uniapp + vue 实现仿微信App聊天应用实践,实现以下功能 1: 用户登陆 2: 聊天会话管理 3: 文本/图片/视频/定位消息收发 4: 贴图表情消息收发 5: 一对一语音视频在线通话 ...
- 【手把手教程】uniapp + vue 从0搭建仿斗鱼虎牙直播App:腾讯云MLVB移动直播实践连麦PK+带货
基于uniapp + vue 实现仿斗鱼虎牙腾讯云移动直播应用实践,实现以下功能 1: 用户登陆 2: 房间管理 3: 房间聊天 4: 直播美颜 5: Svga礼物动画 6: 一对一连麦观众 项目开发 ...
- IM云通信行业步入快车道,谁将成为代表中国的全球IM“独角兽”?
2016年,Twilio的成功上市,以及抢眼的股价表现,拓宽了全球云通信行业的想象空间,行业内公司估值水平也集体上调. 在中国,IM云通信行业也从2016年开始进入了一个“黄金发展时期”,一批如融云. ...
- Python利用Twilio(国际)以及腾讯云服务做一些事情
短信服务验证服务已经不是什么新鲜事了,但是免费的手机短信服务却不多见,本次利用Python3.0基于Twilio和腾讯云服务分别来体验一下国际短信和国内短信接口. 首先,注册Twilio: www.t ...
- Python3利用Twilio(国际)以及腾讯云服务(国内)免费发送手机短信
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_152 短信服务验证服务已经不是什么新鲜事了,但是免费的手机短信服务却不多见,本次利用Python3.0基于Twilio和腾讯云服务 ...
- 腾讯云H5语音通信QoE优化
本文首发在云+社区,未经许可,不得转载. 云+导语:4月21日,腾讯云+社区在京举办"'音'你而来,'视'而可见--音视频技术开发实战沙龙",腾讯音视频实验室高级工程师张轲围绕网络 ...
随机推荐
- leetcode537
public class Solution { public string ComplexNumberMultiply(string a, string b) { var aryA = a.Split ...
- 【Unity】关于U3d与bip骨骼适配
http://blog.csdn.net/kiki110120/article/details/50371662 写在2015/12/21 1.Generic 在拿到美术FBX文件后,导入u3d,默认 ...
- Spring @AliasFor
原文地址:https://blog.csdn.net/wolfcode_cn/article/details/80654730 在Spring的众多注解中,经常会发现很多注解的不同属性起着相同的作用, ...
- Result Grouping / Field Collapsing-结果分组
WiKi:http://wiki.apache.org/solr/FieldCollapsing Introduction 字段折叠和结果分组是考虑相同solr功能的两种不同的方式. 字段折叠折叠一组 ...
- redis 面试题2
使用过Redis分布式锁么,它是什么回事? 先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放. 这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行 ...
- jsp页面数据分页模仿百度分页效果
<%@page import="web09.shop.DBUtil"%> <%@page import="java.sql.ResultSet" ...
- 商业级别Fortify白盒神器介绍与使用分析
转自:http://www.freebuf.com/sectool/95683.html 什么是fortify它又能干些什么? 答:fottify全名叫:Fortify SCA ,是HP的产品 ,是一 ...
- java简单例子介绍IOC和AOP
IOC和AOP的一些基本概念 介绍 IOC 一.什么是IOC IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内 ...
- 安装CentOS 6.4 64 位操作系统
1.安装 CentOS 6.4 64位操作系统的一些困境: 1.1 CentOS 6.4 64位操作系统的ISO文件有4G多,通过U盘安装的方式已经不可取(FAT32 只支持最大4G文件); 1.2 ...
- Go 网络编程笔记
前言: 本文是学习<<go语言程序设计>> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请 ...