我正在做一些我无法控制的服务器端服务。以下在标准C#中工作正常,但在Silverlight 2和3中失败(由于缺少加密类)。
static String DecryptString()
{
s = "<cipherTextHere>";
byte[] toDecryptArray = Convert.FromBase64String(s);
string key = "<key here>";
byte[] keyArray = new byte[key.Length / 2];
for (int i = 0; i < keyArray.Length; i++)
{
keyArray[i] = Convert.ToByte(Convert.ToInt32(key.Substring(i * 2, 2), 16));
}
using (var algo = new System.Security.Cryptography.AesManaged())
{
// The two lines below are the problem
// as SL does not give me the option to select padding or ciphermode
algo.Padding = PaddingMode.PKCS7;
algo.Mode = CipherMode.ECB;
algo.Key = keyArray;
ICryptoTransform cTransform = algo.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(
toDecryptArray, 0, toDecryptArray.Length);
return (UTF8Encoding.UTF8.GetString(resultArray, 0, resultArray.Length));
}
}
我有什么选择?
答案 0 :(得分:1)
您可以编写自己的加密提供程序,也可以搜索已解决该问题的第三方组件。
我知道xceed已经为Silverlight实现了一个压缩提供程序,所以压缩和加密肯定是可能的。
试
答案 1 :(得分:0)
呼吁Legion of the Bouncy Castle帮助您解决此问题。
答案 2 :(得分:0)
Silverlight 2确实实现了一些System.Security.Cryptography命名空间。请参阅文档here。有什么不适合你?
答案 3 :(得分:0)
来自someone smart的解决方案:“您无法在Silverlight中为AesManaged选择填充或密码模式,因此您必须使用默认值。默认情况下,Padding就像您的C#代码中的PKCS7一样,但密码模式是CBC。 “
这样可行,但现在我必须让服务提供商切换:(