PubNub throw" CryptographicException:填充无效,无法删除"

时间:2015-07-12 10:51:49

标签: c# pubnub ringcentral

我试图订阅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的问号),所以我是假设这是实际的密钥。

2 个答案:

答案 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);
}

解密会自动为您完成,因此您无需自己进行解密。