2015-07-12 83 views
2

我試圖訂閱RingCentral服務以在新的電話上收到通知。我正在使用PubNub C#Nuget包。通知訂閱工作正常,然後我用下面連接到PubNub:PubNub投擲「CryptographicException:填充無效,無法刪除」

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代碼崩潰與「CryptographicException:填充無效並且不能被刪除「。有人對這個有經驗麼?

加密密鑰SJG...==看起來像是base64,但將其解碼爲字符串不起作用(只會產生帶有ASCII和UTF8的問號),所以我假設這是實際的密碼密鑰。

+2

對此問題不太確定,但您現在需要重新生成密鑰並更改加密密鑰,因爲您已將其公開給全世界。我把它刪除了,但現在有點晚了。您可以將此問題發佈到[email protected],我們會私下處理這些問題,並將任何解決方案發布回來,而不會暴露任何敏感數據?無需將您的密鑰發送給我們,因爲我們在您的帳戶中擁有它。只需發送你的子密鑰。 –

+1

@CraigConover謝謝,但沒有恐懼 - 我已經調整了他們。 – wezten

+0

很高興知道。你提交了支持嗎? –

回答

3

RingCentral API使用帶有ECB模式和標準PKCS7填充的128位AES。密鑰和密碼是Base64編碼的。

RingCentral加密與Pubnub不同,因此您不應該爲PubNub客戶端提供加密密鑰。相反,您應該使用上述設置手動解碼PubNub消息。

+0

謝謝DFuse提供有關這方面的見解。 –

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

解密是自動照顧你,所以你不需要自己做。