类如下:
Public Class Password
'Field
'方法(加密还是解密)
Public Enum CryptoAction
actionEncrypt = 1
actionDecrypt = 2
End Enum
Private _DESKEY As String
'初始化向量
Private _DESIV As String
Public Sub New()
MyBase.New()
_DESKEY = "ABCDEFGH"
_DESIV = "HGFEDCBA"
End Sub
Public Function EncryptOrDecryptData(ByVal dataString As String, ByVal Direction As CryptoAction) As String
'加密方法对象(DES算法进行对称密钥加密)
Dim desProvider As New DESCryptoServiceProvider
'密码流对象
Dim myCrypToStream As CryptoStream
Dim memoryStream As New MemoryStream
'Dim byteDESKEY As Byte() = GetKeyByteArray(Me._DESKEY )
'Dim byteDESIV As Byte() = GetKeyByteArray(Me._DESIV)
Dim byteDESKEY As Byte() = System.Text.Encoding.ASCII.GetBytes(Me._DESKEY)
Dim byteDESIV As Byte() = System.Text.Encoding.ASCII.GetBytes(Me._DESIV)
Dim myData As Byte() = System.Text.Encoding.ASCII.GetBytes(dataString) Try
Select Case Direction
Case CryptoAction.actionEncrypt
myCrypToStream = New CryptoStream(memoryStream, desProvider.CreateEncryptor(byteDESKEY, byteDESIV), CryptoStreamMode.Write)
Case CryptoAction.actionDecrypt
myCrypToStream = New CryptoStream(memoryStream, desProvider.CreateDecryptor(byteDESKEY, byteDESIV), CryptoStreamMode.Write)
End Select myCrypToStream.Write(myData, 0, myData.Length)
myCrypToStream.FlushFinalBlock()
'Return System.Text.Encoding.Unicode.GetString(memoryStream.ToArray)
Return System.Text.Encoding.ASCII.GetString(memoryStream.ToArray) Catch ex As Exception
Throw ex
End Try End Function
End Class能加密 但是不能解密
我分析好长时间找不出错误!!!!!!!!!!!!!!!!
Public Class Password
'Field
'方法(加密还是解密)
Public Enum CryptoAction
actionEncrypt = 1
actionDecrypt = 2
End Enum
Private _DESKEY As String
'初始化向量
Private _DESIV As String
Public Sub New()
MyBase.New()
_DESKEY = "ABCDEFGH"
_DESIV = "HGFEDCBA"
End Sub
Public Function EncryptOrDecryptData(ByVal dataString As String, ByVal Direction As CryptoAction) As String
'加密方法对象(DES算法进行对称密钥加密)
Dim desProvider As New DESCryptoServiceProvider
'密码流对象
Dim myCrypToStream As CryptoStream
Dim memoryStream As New MemoryStream
'Dim byteDESKEY As Byte() = GetKeyByteArray(Me._DESKEY )
'Dim byteDESIV As Byte() = GetKeyByteArray(Me._DESIV)
Dim byteDESKEY As Byte() = System.Text.Encoding.ASCII.GetBytes(Me._DESKEY)
Dim byteDESIV As Byte() = System.Text.Encoding.ASCII.GetBytes(Me._DESIV)
Dim myData As Byte() = System.Text.Encoding.ASCII.GetBytes(dataString) Try
Select Case Direction
Case CryptoAction.actionEncrypt
myCrypToStream = New CryptoStream(memoryStream, desProvider.CreateEncryptor(byteDESKEY, byteDESIV), CryptoStreamMode.Write)
Case CryptoAction.actionDecrypt
myCrypToStream = New CryptoStream(memoryStream, desProvider.CreateDecryptor(byteDESKEY, byteDESIV), CryptoStreamMode.Write)
End Select myCrypToStream.Write(myData, 0, myData.Length)
myCrypToStream.FlushFinalBlock()
'Return System.Text.Encoding.Unicode.GetString(memoryStream.ToArray)
Return System.Text.Encoding.ASCII.GetString(memoryStream.ToArray) Catch ex As Exception
Throw ex
End Try End Function
End Class能加密 但是不能解密
我分析好长时间找不出错误!!!!!!!!!!!!!!!!
下面的你看看:using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;namespace ZHLXForum.DataProvider
{
/// <summary>
/// 加密保存用户信息。
/// </summary>
public class CEncrypt
{
private SymmetricAlgorithm mobjCryptoService;
private string Key; //密钥 public CEncrypt()
{
mobjCryptoService = new RijndaelManaged();
Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
} //获得密钥
private 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);
} //获得初始向量
private 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);
} /// <summary>
/// 对称加密Rijndael算法实现
/// </summary>
/// <param name="Source">待加密串</param>
/// <returns>加密所得串</returns>
public string Encrypto(string Source)
{
byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
MemoryStream ms = new MemoryStream();
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
ms.Close();
byte[] bytOut = ms.ToArray();
return Convert.ToBase64String(bytOut);
} /// <summary>
/// 用Rijndael算法对字符串进行解密
/// </summary>
/// <param name="Source">待解密串</param>
/// <returns>解密所得串</returns>
public string Decrypto(string Source)
{
byte[] bytIn = Convert.FromBase64String(Source);
MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
return sr.ReadToEnd();
}
}