Помогите разобраться с кодом.....
Выдает: недопустимая длина массива знаков Base-64.
Код:
public Rash()
{
passPhase = "passPhase";
hashAlgorithm = "MD5";
passwordIterations = 2;
}
public string Encrypt(string str2crypt)
{
//преобразуем строку в массив бaйт в кодировке ASCII
byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
byte[] str2cryptBytes = Encoding.UTF8.GetBytes(str2crypt);
byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
//----------------------------------------------------------
//формируем ключ для шифрования
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhase, saltValueBytes, hashAlgorithm, passwordIterations);
//создаём экз класса для сим шифрования
RijndaelManaged symmCrypt = new RijndaelManaged();
// уставн режим связанных блоков
symmCrypt.Mode = CipherMode.CBC;
//массив байт ключа
byte[] keyBytes = password.GetBytes(keySize / 8);
//создаём экз класса - шифрователя
ICryptoTransform cryptoTransform = symmCrypt.CreateEncryptor(keyBytes, initVectorBytes);
//теперь можно шифровать данные :
//поток для записи данных в опертив память
MemoryStream memStream = new MemoryStream();
CryptoStream cryptostream = new CryptoStream(memStream, cryptoTransform, CryptoStreamMode.Write);
//пишем в поток :
cryptostream.Write(str2cryptBytes, //что шифруем
0, //смещение от начало
str2cryptBytes.Length); //длина байта
//опустошим буфер записи
cryptostream.FlushFinalBlock();
//закрываем все потоки
cryptostream.Close();
//возьмём зашифрованые данные
byte[] cipherBytes = memStream.ToArray();
memStream.Close();
//возвращаем зашифрованную строку:
string res = Convert.ToBase64String(cipherBytes);
return res;
}
public string Decrypt(string str2Decrypt)
{
//преобразуем строку в массив бaйт в кодировке ASCII
byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
byte[] str2DecryptBytes = Convert.FromBase64String(str2Decrypt);
byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhase, saltValueBytes, hashAlgorithm, passwordIterations);
//создаём экз класса для сим шифрования
RijndaelManaged symmCrypt = new RijndaelManaged();
symmCrypt.Mode = CipherMode.CBC;
//массив байт ключа
byte[] keyBytes = password.GetBytes(keySize / 8);
//создаём экз класса - шифрователя
ICryptoTransform cryptoTransform = symmCrypt.CreateDecryptor(keyBytes, initVectorBytes);
//теперь можно шифровать данные :
//поток для чтения данных из опертив память
MemoryStream memStream = new MemoryStream(str2DecryptBytes);
//запускаем поток шифрования :
CryptoStream cryptostream = new CryptoStream(memStream, cryptoTransform, CryptoStreamMode.Read);
//создадим массив куда считывать
byte[] decryptBytes = new byte[str2DecryptBytes.Length];
// читаем из потока :
int count =
cryptostream.Read(decryptBytes, //что шифруем
0, //смещение от начало
decryptBytes.Length); //длина байта
cryptostream.Close();
memStream.Close();
//возвращаем зашифрованную строку:
string res = Encoding.UTF8.GetString(decryptBytes, 0, count);
return res;
}
public DataTable Decrypt(DataTable ks)
{
string str2Decrypt;
for (int curRow = 0; curRow < ks.Rows.Count; curRow++)
{
for (int curCol = 0; curCol < ks.Columns.Count; curCol++)
{
var s = ks.Rows[curRow][curCol].GetType();
if (ks.Rows[curRow][curCol].GetType() == i.GetType())
{
str2Decrypt = Convert.ToString(ks.Rows[curRow][curCol]);
byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
byte[] str2DecryptBytes = Convert.FromBase64String(str2Decrypt);
byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!
Модератор.