C# “耻骨投掷”;CryptographicException:填充无效,无法删除“;

C# “耻骨投掷”;CryptographicException:填充无效,无法删除“;,c#,pubnub,ringcentral,C#,Pubnub,Ringcentral,我正在尝试订阅RingCentral服务,以便在接到新电话时得到通知。我正在使用PubNub C#Nuget包。通知订阅工作正常,然后我使用以下方式连接到PubNub: var pn = new Pubnub("", "sub-c-...", "sec-c-ZDNlYjY0OWMtGHFmOC00OTg2LWJjMTMtYjBkMzgzOWRmMzUz", "SJG...==", false); pn.Subscribe<string>("412276449514272_46d8da

我正在尝试订阅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));
var pn=new publinub(“,”sub-c-“,”sec-c-zdnlyjy0owmtghfmoc00otg2lwjjmtmttyjbkmzgzgwrmmzuz),“SJG…=”,false);
pn.Subscribe(“412276449514272_46d8dac5”,u=>Debug.WriteLine(“u:+u”),c=>Debug.WriteLine(“c:+c),e=>Debug.WriteLine(“e:+e”);
但是,当打电话时,Pubnub会向我的代码发送一个通知,但Pubnub代码会崩溃并出现“CryptographicException:填充无效且无法删除”。有没有人有这方面的经验


密码密钥
SJG…==
看起来像是base64,但将其解码为字符串不起作用(只会产生带有ASCII和UTF8的问号),因此我假设这是实际的密码密钥。

RingCentral API使用128位AES,带有ECB模式和标准PKCS7填充。密钥和密码是Base64编码的


RingCentral加密与Pubnub不同,因此不应向Pubnub客户端提供加密密钥。相反,您应该使用上述设置手动解码PubNub消息

请尝试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);
}

解密由您自动完成,因此您无需自行完成。

不确定是否存在此问题,但您现在需要重新生成密钥并更改加密密钥,因为您已将其公开。我把它拿走了,但现在有点晚了。你能把这个问题发到网上吗support@pubnub.com我们将私下处理这一问题,并在不暴露任何敏感数据的情况下发回任何解决方案?而且也没有必要将您的密钥发送给我们,因为我们在您的帐户中有它。只需发送您的子密钥。@CraigConover谢谢,但不用担心-我已经先调整了它们。很高兴知道。你提交支持了吗?@CraigConover是的,case#13877,谢谢。