我试图订阅RingCentral服务以获得有关新电话的通知。我正在使用PubNub C#Nuget包。通知订阅工作正常,然后使用以下内容连接到PubNub:
var pn = new Pubnub("", "sub-c-...", "sec-c-ZDNlYjY0OWMtGHFmOC00OTg2LWJjMTMtYjBkMzgzOWRmMzUz", "SJG...==", false);
pn.Subscribe<string>("412276449514272_46d8dac5", u => Debug.WriteLine("u:" + u), c => Debug.WriteLine("c:" + c), e => Debug.WriteLine("e:" + e));
然而,当进行电话呼叫时,Pubnub会向我的代码发送通知,但是Pubnub代码崩溃了&#34; CryptographicException:填充无效且无法删除&#34;。有没有人有这方面的经验?
密钥SJG...==
似乎是它的base64,但将其解码为字符串并不起作用(只生成ASCII和UTF8的问号),所以我是假设这是实际的密钥。
答案 0 :(得分:3)
RingCentral API使用128位AES,ECB模式和标准PKCS7填充。密钥和密码是Base64编码的。
RingCentral加密与Pubnub不同,因此您不应向PubNub客户端提供加密密钥。相反,您应该使用上述设置手动解码PubNub消息。
答案 1 :(得分:0)
请尝试使用RingCentral SDK 1.0.0。在1.0.0中,BouncyCastle用于解密消息。这里有一些代码供您参考:
private object Decrypt(string dataString)
{
var key = Convert.FromBase64String(subscriptionInfo.DeliveryMode.EncryptionKey);
var keyParameter = ParameterUtilities.CreateKeyParameter("AES", key);
var cipher = CipherUtilities.GetCipher("AES/ECB/PKCS7Padding");
cipher.Init(false, keyParameter);
var data = Convert.FromBase64String(dataString);
var memoryStream = new MemoryStream(data, false);
var cipherStream = new CipherStream(memoryStream, cipher, null);
var bufferSize = 1024;
var buffer = new byte[bufferSize];
var length = 0;
var resultStream = new MemoryStream();
while ((length = cipherStream.Read(buffer, 0, bufferSize)) > 0)
{
resultStream.Write(buffer, 0, length);
}
var resultBytes = resultStream.ToArray();
var result = Encoding.UTF8.GetString(resultBytes, 0, resultBytes.Length);
return JsonConvert.DeserializeObject(result);
}
解密会自动为您完成,因此您无需自己进行解密。