好久没提问了,今天在做加解密时,解密时出现错误:要解密的数据的长度无效,找了一天,都没有找到原因。不知为何?以下是加解密的代码
//加密
public string DesEncrypt(string strText, string strEncrKey)
{
byte[] byKey = null;
byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
try
{
byKey = System.Text.Encoding.UTF8.GetBytes(strEncrKey);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.UTF8.GetBytes(strText);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
catch (System.Exception error)
{
return "error:" + error.Message + "\r";
}
}
//解密
public string DesDecrypt(string strText, string sDecrKey)
{
byte[] byKey = null;
byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
byte[] inputByteArray = new Byte[strText.Length];
try
{
byKey = System.Text.Encoding.Default.GetBytes(sDecrKey);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
inputByteArray = Convert.FromBase64String(strText);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
//System.Text.Encoding encoding = new System.Text.UTF8Encoding();
//return encoding.GetString(ms.ToArray());
return Encoding.UTF8.GetString(ms.ToArray());
}
catch (System.Exception error)
{
return "error:" + error.Message + "\r";
} }
//加密
public string DesEncrypt(string strText, string strEncrKey)
{
byte[] byKey = null;
byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
try
{
byKey = System.Text.Encoding.UTF8.GetBytes(strEncrKey);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.UTF8.GetBytes(strText);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
catch (System.Exception error)
{
return "error:" + error.Message + "\r";
}
}
//解密
public string DesDecrypt(string strText, string sDecrKey)
{
byte[] byKey = null;
byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
byte[] inputByteArray = new Byte[strText.Length];
try
{
byKey = System.Text.Encoding.Default.GetBytes(sDecrKey);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
inputByteArray = Convert.FromBase64String(strText);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
//System.Text.Encoding encoding = new System.Text.UTF8Encoding();
//return encoding.GetString(ms.ToArray());
return Encoding.UTF8.GetString(ms.ToArray());
}
catch (System.Exception error)
{
return "error:" + error.Message + "\r";
} }
解决方案 »
- 用vsstudio调试时载入javascript的问题
- 请问网站里的字母索引用asp.net是怎么实现的啊
- DropDownList OnSelectedIndexChanged 问题(已设置了AutoPostBack=True)
- 很简单的问题 ... 请教
- |M| 一个奇怪的问题 快来救救 Visible='<%= ?? %>' 的问题 急啊
- 急:怎样在WebForm上面实现的快捷键,如F2???
- 为什么我所有的应该有innerHtml属性的地方都没有这个属性呢?--现结!
- 高分求算法!急!!!!
- TreeView使用求助
- vs2017和19将代码放在独立的文件中
- 实现大的视频文件上传如何实现??
- 如何在网页中显示音标
一:
加密时:byKey = System.Text.Encoding.UTF8.GetBytes(strEncrKey);
解密时:byKey = System.Text.Encoding.Default.GetBytes(sDecrKey);
两者的编码方式不一样二:
在解密时:byte[] inputByteArray = new Byte[strText.Length];
在加密时是使用:Convert.ToBase64String把byte[]转换成string的,那么在解密的时候当然也应该是将string转换成byte[]
修改后的代码(在本机上通过):public string DesEncrypt(string strText, string strEncrKey)
{
byte[] byKey = null;
byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
try
{
byKey = System.Text.Encoding.UTF8.GetBytes(strEncrKey);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.UTF8.GetBytes(strText);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
catch (System.Exception error)
{
return "error:" + error.Message + "\r";
}
}//解密
public string DesDecrypt(string strText, string sDecrKey)
{
byte[] byKey = null;
byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
//byte[] inputByteArray = new Byte[strText.Length];
byte[] inputByteArray = Convert.FromBase64String(strText);
try
{
//byKey = System.Text.Encoding.Default.GetBytes(sDecrKey);
byKey = System.Text.Encoding.UTF8.GetBytes(sDecrKey);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
inputByteArray = Convert.FromBase64String(strText);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
//System.Text.Encoding encoding = new System.Text.UTF8Encoding();
//return encoding.GetString(ms.ToArray());
return Encoding.UTF8.GetString(ms.ToArray());
}
catch (System.Exception error)
{
return "error:" + error.Message + "\r";
}}