просмотреть обычную копию в буфер обмена, распечатать?
//пространство имен
использование системы;
использование System.Security.Cryptography;
использование System.IO;
использование System.Text;
//метод
//метод шифрования
публичная строка Encrypt (строка pToEncrypt, строка sKey)
{
DESCryptoServiceProvider дес = новый DESCryptoServiceProvider();
//Помещаем строку в массив байтов
//Я изменил кодировку UTF8, первоначально использовавшуюся на кодировку Unicode, но она не работает.
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//Установим ключ и смещение зашифрованного объекта
//Исходный текст использует метод GetBytes метода ASCIIEncoding.ASCII.
// Сделать обязательным ввод текста на английском языке при вводе пароля
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream мс = новый MemoryStream();
CryptoStream cs = новый CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
//Записываем массив байтов в криптопоток
//(Оно окажется в потоке памяти)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Получаем данные обратно из потока памяти в строку
StringBuilder ret = новый StringBuilder();
foreach (байт b в ms.ToArray())
{
//Форматируем как шестнадцатеричный
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
вернуть ret.ToString();
}
//метод расшифровки
общедоступная строка Decrypt (строка pToDecrypt, строка sKey)
{
DESCryptoServiceProvider дес = новый DESCryptoServiceProvider();
//Помещаем входную строку в массив байтов
байт [] inputByteArray = новый байт [pToDecrypt.Length / 2];
for(int x = 0; x < pToDecrypt.Length/2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (байт)i;
}
//Установим ключ и смещение зашифрованного объекта. Это значение важно и не может быть изменено.
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream мс = новый MemoryStream();
CryptoStream cs = новый CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
//Сбрасываем данные через криптопоток в поток памяти
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Получаем расшифрованные данные обратно из потока памяти
//Создаем объект StringBuild. CreateDecrypt использует объект потока, и расшифрованный текст необходимо преобразовать в объект потока.
StringBuilder ret = новый StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
//-------Код завершен--------------------
//Пространство имен
использование системы;
использование System.Security.Cryptography;
использование System.IO;
использование System.Text;
//метод
//метод шифрования
публичная строка Encrypt (строка pToEncrypt, строка sKey)
{
DESCryptoServiceProvider дес = новый DESCryptoServiceProvider();
//Помещаем строку в массив байтов
//Я изменил кодировку UTF8, первоначально использовавшуюся на кодировку Unicode, но она не работает.
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//Установим ключ и смещение зашифрованного объекта
//Исходный текст использует метод GetBytes метода ASCIIEncoding.ASCII.
// Сделать обязательным ввод текста на английском языке при вводе пароля
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream мс = новый MemoryStream();
CryptoStream cs = новый CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
//Записываем массив байтов в криптопоток
//(Оно окажется в потоке памяти)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Получаем данные обратно из потока памяти в строку
StringBuilder ret = новый StringBuilder();
foreach (байт b в ms.ToArray())
{
//Форматируем как шестнадцатеричный
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
вернуть ret.ToString();
}
//метод расшифровки
общедоступная строка Decrypt (строка pToDecrypt, строка sKey)
{
DESCryptoServiceProvider дес = новый DESCryptoServiceProvider();
//Помещаем входную строку в массив байтов
байт [] inputByteArray = новый байт [pToDecrypt.Length / 2];
for(int x = 0; x < pToDecrypt.Length/2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (байт)i;
}
//Установим ключ и смещение зашифрованного объекта. Это значение важно и не может быть изменено.
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream мс = новый MemoryStream();
CryptoStream cs = новый CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
//Сбрасываем данные через криптопоток в поток памяти
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Получаем расшифрованные данные обратно из потока памяти
//Создаем объект StringBuild. CreateDecrypt использует объект потока, и расшифрованный текст необходимо преобразовать в объект потока.
StringBuilder ret = новый StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
//------Код завершен--------------------
Примечание. При вводе пароля в sKey необходимо использовать английские символы, чувствительные к регистру, а количество символов — 8, не больше и не меньше, иначе произойдет ошибка.
Я использую Windows2000 Server .Net Framework SP3, и он успешно используется под asp.net под VS.Net, и шифрование и дешифрование в норме!