C# windowsrt项目中的解密
此代码在Windows Phone Silverlight项目中运行良好。 但这在Windows RT项目中不起作用。 其syay加密、Aes和Aes管理类缺失等。 请帮帮我,谢谢。 我真的不需要密码和盐。只需简单地获取字符串并解密即可。C# windowsrt项目中的解密,c#,windows-rt,C#,Windows Rt,此代码在Windows Phone Silverlight项目中运行良好。 但这在Windows RT项目中不起作用。 其syay加密、Aes和Aes管理类缺失等。 请帮帮我,谢谢。 我真的不需要密码和盐。只需简单地获取字符串并解密即可。 public class DecryptionHelper { public static string Decrypt(string base64StringToDecrypt) { if (string.IsNullOrEm
public class DecryptionHelper
{
public static string Decrypt(string base64StringToDecrypt)
{
if (string.IsNullOrEmpty(base64StringToDecrypt))
return string.Empty;
//Set up the encryption objects
using (Aes acsp = GetProvider(Encoding.UTF8.GetBytes
(Constants.EncryptionKey)))
{
byte[] RawBytes = Convert.FromBase64String(base64StringToDecrypt);
ICryptoTransform ictD = acsp.CreateDecryptor();
//RawBytes now contains original byte array, still in Encrypted state
//Decrypt into stream
MemoryStream msD = new MemoryStream(RawBytes, 0, RawBytes.Length);
CryptoStream csD = new CryptoStream(msD, ictD, CryptoStreamMode.Read);
//csD now contains original byte array, fully decrypted
//return the content of msD as a regular string
return (new StreamReader(csD)).ReadToEnd();
}
}
private static Aes GetProvider(byte[] key)
{
Aes result = new AesManaged();
result.GenerateIV();
result.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
byte[] RealKey = GetKey(key, result);
result.Key = RealKey;
return result;
}
private static byte[] GetKey(byte[] suggestedKey, SymmetricAlgorithm p)
{
byte[] kRaw = suggestedKey;
List<byte> kList = new List<byte>();
for (int i = 0; i < p.LegalKeySizes[0].MinSize; i += 8)
{
kList.Add(kRaw[(i / 8) % kRaw.Length]);
}
byte[] k = kList.ToArray();
return k;
}
}
公共类DecryptionHelper
{
公共静态字符串解密(字符串base64StringToDecrypt)
{
if(string.IsNullOrEmpty(base64StringToDecrypt))
返回字符串。空;
//设置加密对象
使用(Aes acsp=GetProvider(Encoding.UTF8.GetBytes
(Constants.EncryptionKey)))
{
byte[]RawBytes=Convert.FromBase64String(base64StringToDecrypt);
ICryptoTransform ictD=acsp.CreateDecryptor();
//RawBytes现在包含原始字节数组,仍然处于加密状态
//解密成流
MemoryStream msD=新的MemoryStream(RawBytes,0,RawBytes.Length);
CryptoStream csD=新加密流(msD、ictD、CryptoStreamMode.Read);
//csD现在包含完全解密的原始字节数组
//以常规字符串形式返回msD的内容
return(newstreamreader(csD)).ReadToEnd();
}
}
专用静态Aes GetProvider(字节[]键)
{
Aes结果=新Aes管理();
result.GenerateIV();
result.IV=新字节[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
字节[]RealKey=GetKey(key,result);
result.Key=RealKey;
返回结果;
}
私有静态字节[]GetKey(字节[]suggestedKey,对称算法p)
{
字节[]kRaw=建议的密钥;
List kList=新列表();
对于(int i=0;i
WinRT有完全不同的加密API。可能有一个包装器。您的代码有严重的加密问题。1) 键似乎是字符串,而不是正确的键。要么生成一个正确的密钥(如果需要字符串,请对其进行base64编码),要么使用KDF。2) 静脉输液器是固定的。IV的全部要点是,每种加密都不同。3) 缺少MAC支持主动攻击,包括填充预言机。