Иногда, приходится сталкиваться с такими ситуациями, в которых в обязательном порядке шифруются строковые данные. Многие программисты считали, что такая возможность будет полноценно реализована в четвертой версии программного продукта, благодаря чему удастся избавиться от написания довольно затяжных кодов. Но, результаты не оправдали надежды и, так получилось, что глава компании не подошел к данному вопросу со всей серьезностью. Скорее всего, он не воспринял данную проблему всерьез, поэтому для реализации подобных функций все также приходится заниматься написание соответствующих кодов. Достаточное количество информации может быть найдено средствами поисковой системы. В данной статье будет приведен один из оптимальных примеров.
Шифровка может осуществляться средствами целых отдельных классов, предназначенных специально для работы со строками, преобразовываемыми в пароли. В тоже время пароль может быть использован для организации расшифровки. Нельзя переоценить ту пользу, которую имеет данный класс для людей, работающих с данным языком программирования. Для кодирования используется 64 база, обладающая высокой эффективностью и производительностью.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Security.Cryptography;
using System.IO;
namespace Site_Spider
{
class Crypt
{
public static byte[] Encrypt(byte[] data, string password)
{
SymmetricAlgorithm sa = Rijndael.Create();
ICryptoTransform ct = sa.CreateEncryptor(
(new PasswordDeriveBytes(password, null)).GetBytes(16),
new byte[16]);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(data, 0, data.Length);
cs.FlushFinalBlock();
return ms.ToArray();
}
public static string Encrypt(string data, string password)
{
return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(data), password));
}
static public byte[] Decrypt(byte[] data, string password)
{
BinaryReader br = new BinaryReader(InternalDecrypt(data, password));
return br.ReadBytes((int)br.BaseStream.Length);
}
static public string Decrypt(string data, string password)
{
CryptoStream cs = InternalDecrypt(Convert.FromBase64String(data), password);
StreamReader sr = new StreamReader(cs);
return sr.ReadToEnd();
}
static CryptoStream InternalDecrypt(byte[] data, string password)
{
SymmetricAlgorithm sa = Rijndael.Create();
ICryptoTransform ct = sa.CreateDecryptor(
(new PasswordDeriveBytes(password, null)).GetBytes(16),
new byte[16]);
MemoryStream ms = new MemoryStream(data);
return new CryptoStream(ms, ct, CryptoStreamMode.Read);
}
}
}