.NET 4.x Шифрование и расшифровка строки с записью/чтением из БД - C#
Формулировка задачи:
Доброго времени суток.
Необходимо реализовать шифрование строки, и затем ее расшифрование.
Данная строка записывается в БД в зашифрованном виде, а затем из нее должна преобразовываться в в исходную.
Данный функционал был реализован мною так, когда зашифрованное значение хранится в byte[], то все ок, но т.к. мне необходимо в конечном счете работать со строками, то расшифровка из строки не работает.
Не знаю, как решить данную проблему. Все уже перепробовали)
Помогите, пожалуйста, кто в этом силен.
Вот моя реализация):
using System;
using System.Security.Cryptography;
using System.Text;
namespace CoderDecoder
{
internal class Program
{
private static void Main(string[] args)
{
string login = "UserLogin";
var coderlogin = CoderString(login);
var decoderlogin = DecoderString(coderlogin);
Console.WriteLine("Логин:");
Console.WriteLine(login + "\n");
Console.WriteLine("Зашифрованный Логин:");
Console.WriteLine(coderlogin+"\n");
Console.WriteLine("Расшифрованный Логин:");
Console.WriteLine(decoderlogin + "\n");
Console.ReadKey();
}
/// <summary>
/// Метод шифрования строки
/// </summary>
/// <param name="str">исходная (нешифрованная) строка</param>
/// <returns>шифрованная строка</returns>
private static string CoderString(string str)
{
string ret = string.Empty;
try
{
var provider = new RSACryptoServiceProvider();
Byte[] encryptedBytes = provider.Encrypt(
Encoding.UTF8.GetBytes(str), true);
// этот "говнокод" переводит из массива в строку
// не знаю, как это сделать иначе)
foreach (byte encryptedByte in encryptedBytes)
{
ret = ret + encryptedByte;
}
}
catch (Exception)
{
Console.WriteLine("Ничего не вышло!");
}
return ret;
}
/// <summary>
/// Метод дешифрования строки
/// </summary>
/// <param name="str">исходная (шифрованная) строка</param>
/// <returns>дешифрованная строка</returns>
private static string DecoderString(string str)
{
string ret = string.Empty;
try
{
var provider = new RSACryptoServiceProvider();
// привожу строку к массиву Byte для расшивровки
// видимо здесь и косяк)
Byte[] strbyte = Encoding.Default.GetBytes(str);
ret = Encoding.UTF8.GetString(
provider.Decrypt(strbyte, true));
}
catch (Exception)
{
Console.WriteLine("Ничего не вышло!");
}
return ret;
}
}
}Решение задачи: «.NET 4.x Шифрование и расшифровка строки с записью/чтением из БД»
textual
Листинг программы
byte[] bytes = {10, 12, 13, 14, 15};
string s2 = string.Join("", bytes.Select(x => x.ToString("X2")));
Console.WriteLine(s2);
byte[] resultBytes = new byte[s2.Length/2];
for (int i = 0; i < resultBytes.Length; i++)
{
resultBytes[i] = byte.Parse(s2.Substring(2*i, 2), NumberStyles.AllowHexSpecifier);
Console.Write(resultBytes[i] + " ");
}