腾讯云通信后台生成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实现的更多相关文章

  1. 服务端搭建——腾讯云通信(IM)

    前言 在手机app中因为需要即时聊天功能,在项目采用腾讯云通信服务.如下流程图: 当手机端拿到签名后,就可登录IM,使用im提供的sdk收发信息. 准备工作 1.在腾讯云注册获取appid 2.申请开 ...

  2. 腾讯云通信WebIM事件回调的坑~

    最近在开过工作中用到了腾讯IM的功能,由于业务的需要主要使用到了: 1.loginInfo 用户登录,用户信息 2.getRecentContactList 获得最近联系人 3.getLastGrou ...

  3. 腾讯通信云服务端使用心得,腾讯云IM

    腾讯通信云服务端使用心得 1.腾讯通信服务入口并创建应用 方便使用保留url地址 :   https://cloud.tencent.com/product/im 注册账号腾讯云账号->通过审核 ...

  4. 【手把手教程】uniapp + vue 从0搭建仿微信App聊天应用:腾讯云TXIM即时通讯的最佳实践

    基于uniapp + vue 实现仿微信App聊天应用实践,实现以下功能 1: 用户登陆 2: 聊天会话管理 3: 文本/图片/视频/定位消息收发 4: 贴图表情消息收发 5: 一对一语音视频在线通话 ...

  5. 【手把手教程】uniapp + vue 从0搭建仿斗鱼虎牙直播App:腾讯云MLVB移动直播实践连麦PK+带货

    基于uniapp + vue 实现仿斗鱼虎牙腾讯云移动直播应用实践,实现以下功能 1: 用户登陆 2: 房间管理 3: 房间聊天 4: 直播美颜 5: Svga礼物动画 6: 一对一连麦观众 项目开发 ...

  6. IM云通信行业步入快车道,谁将成为代表中国的全球IM“独角兽”?

    2016年,Twilio的成功上市,以及抢眼的股价表现,拓宽了全球云通信行业的想象空间,行业内公司估值水平也集体上调. 在中国,IM云通信行业也从2016年开始进入了一个“黄金发展时期”,一批如融云. ...

  7. Python利用Twilio(国际)以及腾讯云服务做一些事情

    短信服务验证服务已经不是什么新鲜事了,但是免费的手机短信服务却不多见,本次利用Python3.0基于Twilio和腾讯云服务分别来体验一下国际短信和国内短信接口. 首先,注册Twilio: www.t ...

  8. Python3利用Twilio(国际)以及腾讯云服务(国内)免费发送手机短信

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_152 短信服务验证服务已经不是什么新鲜事了,但是免费的手机短信服务却不多见,本次利用Python3.0基于Twilio和腾讯云服务 ...

  9. 腾讯云H5语音通信QoE优化

    本文首发在云+社区,未经许可,不得转载. 云+导语:4月21日,腾讯云+社区在京举办"'音'你而来,'视'而可见--音视频技术开发实战沙龙",腾讯音视频实验室高级工程师张轲围绕网络 ...

随机推荐

  1. leetcode547

    public class Solution { private void dfs(int[,] M, int[] visited, int i) { ; j < M.GetLength(); j ...

  2. **利用列表和super实现有序字典

    class MyDict(dict): def __init__(self): self.temp_list = [] super(MyDict,self).__init__() def __seti ...

  3. RocketMQ初探(二)之RocketMQ3.26版本搭建(含简单Demo测试案例)

    作为一名程序猿,要敢于直面各种现实,脾气要好,心态要棒,纵使Bug虐我千百遍,我待它如初恋,方法也有千万种,一条路不行,换条路走走,方向对了,只要前行,总会上了罗马的道. Apache4.x最新版本既 ...

  4. 黑暗之光 Day3

    1. 滚动窗口 Scroll View. GameObject itemGo = NGUITools.AddChild(grid.gameObject, skillItemPrefab); grid. ...

  5. codeforce 1070 E Getting Deals Done(二分求最大化最小值)

    Polycarp has a lot of work to do. Recently he has learned a new time management rule: "if a tas ...

  6. linux tar 压缩

    压缩文件 tar -czvf xxx.tar.gz yourdict 解压文件 tar xzf aa.tar.gz

  7. 一道容易栽坑的有趣的面试题(关于js,定时器,闭包等)

    1.首先下面代码输出什么? for (var i = 0; i < 5; i++) { console.log(i); } 输出:0 1 2 3 4 2.上面只是普通的输出,没有陷阱再看下面这个 ...

  8. Bresenham画线算法

    [Bresenham画线算法] Bresenham是一种光栅化算法.不仅可以用于画线,也可以用用画圆及其它曲线. 通过lower与upper的差,可以知道哪一个点更接近线段: 参考:<计算机图形 ...

  9. JAVA 定时器的三种方法

    /** * 普通thread * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着, * 通过sleep方法来达到定时任务的效果.这样可以快速简单的实现,代码如下: * @au ...

  10. SVN的“Invalid authz configuration”错误的解决方法

    公司有人离职后,我把他svn账号删除 然后就报这个错了,我检查了authz文件,完全看不出什么错误.... 网上的各种方法试一遍,无果. 蹲个厕所,继续查这个问题 看到一个答案: 给不存在的组配置权限 ...