利用Rijndael算法解密时"base-64字符数组的无效长度" 怎么解决 利用Rijndael算法加密后再进行解密的话就会报错 错误信息为:"base-64字符数组的无效长度" 大家谁能告诉我怎么解决哦? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 确定 Key 与 IV 都对得上不;确定解密的数据无误不? 把 Key, IV, 明文贴上来看看? 应该没有问题的, 我也经常使用 RijndaelManager 加密只有一位的数据 您好,昨晚突然断网了,您看看 谢谢咯static Rijndael() { mobjCryptoService = new RijndaelManaged(); Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7"; } public static byte[] GetLegalKey() { string sTemp = Key; mobjCryptoService.GenerateKey(); byte[] bytTemp = mobjCryptoService.Key; int KeyLength = bytTemp.Length; if (sTemp.Length > KeyLength) sTemp = sTemp.Substring(0, KeyLength); else if (sTemp.Length < KeyLength) sTemp = sTemp.PadRight(KeyLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } /// <summary> /// 获得初始向量IV /// </summary> /// <returns>初试向量IV</returns> public static byte[] GetLegalIV() { string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; mobjCryptoService.GenerateIV(); byte[] bytTemp = mobjCryptoService.IV; int IVLength = bytTemp.Length; if (sTemp.Length > IVLength) sTemp = sTemp.Substring(0, IVLength); else if (sTemp.Length < IVLength) sTemp = sTemp.PadRight(IVLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } 用你的代码试了试, 没有问题啊.... private static string Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7"; private static RijndaelManaged mobjCryptoService = new RijndaelManaged(); public static byte[] GetLegalKey() { string sTemp = Key; mobjCryptoService.GenerateKey(); byte[] bytTemp = mobjCryptoService.Key; int KeyLength = bytTemp.Length; if (sTemp.Length > KeyLength) sTemp = sTemp.Substring(0, KeyLength); else if (sTemp.Length < KeyLength) sTemp = sTemp.PadRight(KeyLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } /// <summary> /// 获得初始向量IV /// </summary> /// <returns>初试向量IV </returns> public static byte[] GetLegalIV() { string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; mobjCryptoService.GenerateIV(); byte[] bytTemp = mobjCryptoService.IV; int IVLength = bytTemp.Length; if (sTemp.Length > IVLength) sTemp = sTemp.Substring(0, IVLength); else if (sTemp.Length < IVLength) sTemp = sTemp.PadRight(IVLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } static void Main(string[] args) { // 随机的测试数据 byte[] testBuff = new byte[1]; Random r = new Random(); r.NextBytes(testBuff); // 加密 RijndaelManaged encryptor = new RijndaelManaged(); ICryptoTransform encryptForm = encryptor.CreateEncryptor(GetLegalKey(), GetLegalIV()); MemoryStream msE = new MemoryStream(); CryptoStream csE = new CryptoStream(msE, encryptForm, CryptoStreamMode.Write); csE.Write(testBuff, 0, testBuff.Length); csE.FlushFinalBlock(); // 密文 byte[] encryptedBuff = msE.ToArray(); // 解密 RijndaelManaged decryptor = new RijndaelManaged(); ICryptoTransform decryptFrom = decryptor.CreateDecryptor(GetLegalKey(), GetLegalIV()); Byte[] decryptedBuff = new Byte[encryptedBuff.Length]; MemoryStream msD = new MemoryStream(); msD.Write(encryptedBuff, 0, encryptedBuff.Length); msD.Seek(0, SeekOrigin.Begin); CryptoStream ds = new CryptoStream(msD, decryptFrom, CryptoStreamMode.Read); ds.Read(decryptedBuff, 0, decryptedBuff.Length); Console.WriteLine(string.Format("testBuff: {0}; decryptedBuff: {1}", BitConverter.ToString(testBuff), BitConverter.ToString(decryptedBuff))); Console.Read(); } Rijndael算法也会出现这种问题吗?我现在用的就是这个,不过用des算法的时候出现的问题现在就不出现了! [分享]外部exe窗体嵌入winform 怎么把list的元素添加到另外一个List中去 【【【【【简单类型的简单问题】】】】】 关于WINDOWS窗体 读取局域网内数据服务器,提示ORA-01019错误 .NET序列化问题 哪里能找到Windows API的各个常数的对应值及其含义啊? 复制文件出错 现在时网盾的学员受欢迎还是双N的或者是北大青鸟?(穷。。。散分) 我有一个C# 问题向各位请教! 串口通信 CRC校验问题 望各位大虾帮帮忙 C# 数组小问题
{
mobjCryptoService = new RijndaelManaged();
Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
}
public static byte[] GetLegalKey()
{
string sTemp = Key;
mobjCryptoService.GenerateKey();
byte[] bytTemp = mobjCryptoService.Key;
int KeyLength = bytTemp.Length;
if (sTemp.Length > KeyLength)
sTemp = sTemp.Substring(0, KeyLength);
else if (sTemp.Length < KeyLength)
sTemp = sTemp.PadRight(KeyLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
/// <summary>
/// 获得初始向量IV
/// </summary>
/// <returns>初试向量IV</returns>
public static byte[] GetLegalIV()
{
string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
mobjCryptoService.GenerateIV();
byte[] bytTemp = mobjCryptoService.IV;
int IVLength = bytTemp.Length;
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength);
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
private static string Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
private static RijndaelManaged mobjCryptoService = new RijndaelManaged(); public static byte[] GetLegalKey()
{
string sTemp = Key;
mobjCryptoService.GenerateKey();
byte[] bytTemp = mobjCryptoService.Key;
int KeyLength = bytTemp.Length;
if (sTemp.Length > KeyLength)
sTemp = sTemp.Substring(0, KeyLength);
else if (sTemp.Length < KeyLength)
sTemp = sTemp.PadRight(KeyLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
/// <summary>
/// 获得初始向量IV
/// </summary>
/// <returns>初试向量IV </returns>
public static byte[] GetLegalIV()
{
string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
mobjCryptoService.GenerateIV();
byte[] bytTemp = mobjCryptoService.IV;
int IVLength = bytTemp.Length;
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength);
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
} static void Main(string[] args)
{
// 随机的测试数据
byte[] testBuff = new byte[1];
Random r = new Random();
r.NextBytes(testBuff); // 加密
RijndaelManaged encryptor = new RijndaelManaged();
ICryptoTransform encryptForm = encryptor.CreateEncryptor(GetLegalKey(), GetLegalIV()); MemoryStream msE = new MemoryStream();
CryptoStream csE = new CryptoStream(msE, encryptForm, CryptoStreamMode.Write); csE.Write(testBuff, 0, testBuff.Length);
csE.FlushFinalBlock(); // 密文
byte[] encryptedBuff = msE.ToArray(); // 解密
RijndaelManaged decryptor = new RijndaelManaged();
ICryptoTransform decryptFrom = decryptor.CreateDecryptor(GetLegalKey(), GetLegalIV()); Byte[] decryptedBuff = new Byte[encryptedBuff.Length]; MemoryStream msD = new MemoryStream();
msD.Write(encryptedBuff, 0, encryptedBuff.Length);
msD.Seek(0, SeekOrigin.Begin);
CryptoStream ds = new CryptoStream(msD, decryptFrom, CryptoStreamMode.Read); ds.Read(decryptedBuff, 0, decryptedBuff.Length); Console.WriteLine(string.Format("testBuff: {0}; decryptedBuff: {1}",
BitConverter.ToString(testBuff), BitConverter.ToString(decryptedBuff))); Console.Read();
}