Шифрование строки или массива байт, C#

В MSDN много примеров как закриптовать целый файл. Но, к сожалению, нет ничего о том как закриптовать просто строку или массив байт. Следующий класс позволяет восполнить данный пробел.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
 
namespace RSDN
{
    public 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);
        }
    }
}

Источник: http://www.codelab.ru/task/crypt_anything/

  1. Вы тестировали то что написали?
    При шифрование массива байт выдает ошибку «Поток не поддерживает поиск.»

  2. код нужно чуток подправить
    строку 35 заменить на :
    return br.ReadBytes(data.Length);

  3. Спасибо! очень пригодился. Согласен. на МСДН и правда нет примера для работа со строками

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>