Зашифруйте 2 части данных отдельно и экспортируйте их одним файлом через Rijndael в C#.

Есть 2 кнопки, которые будут генерировать 2 части данных. Мне нужно зашифровать их отдельно и экспортировать в один и тот же файл. Тогда мне нужно будет расшифровать его позже.

Можно ли использовать режим CBC? Использование того же потока для шифрования 1-го блока 2-го фрагмента данных последним блоком 1-го фрагмента данных? (Чтобы избежать IV)

Or

Я могу сделать это в режиме ECB? Было бы хорошо, если бы кто-то мог подробнее рассказать об этом.


person Kelvin    schedule 14.12.2009    source источник
comment
Не используйте режим ECB, это плохо. .html   -  person Jens Granlund    schedule 15.12.2009


Ответы (1)


Вы всегда можете сохранить два значения как отдельные свойства файла.

[Serializable]
public class EncryptedValues
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }

    public static EncryptedValues FromXml(string xmlString)
    {
        if (!string.IsNullOrEmpty(xmlString))
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(EncryptedValues));
            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (StreamWriter streamWriter = new StreamWriter(memoryStream))
                {
                    streamWriter.Write(xmlString);
                    streamWriter.Flush();
                    memoryStream.Flush();
                    memoryStream.Position = 0;

                    return (xmlSerializer.Deserialize(memoryStream) as EncryptedValues);
                }
            }
        }

        return null;
    }

    public string ToXml()
    {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(EncryptedValues));

        using (MemoryStream memoryStream = new MemoryStream())
        {
            using (StreamWriter streamWriter = new StreamWriter(memoryStream))
            {
                xmlSerializer.Serialize(streamWriter, o);
                streamWriter.Flush();
                memoryStream.Flush();
                memoryStream.Position = 0;

                using (StreamReader streamReader = new StreamReader(memoryStream))
                {
                    return streamReader.ReadToEnd();
                }
            }
        }
    }

}
person Cory Charlton    schedule 14.12.2009
comment
Я не упомянул, что также разрешено экспортировать только один кусок данных. Кстати, моя программа не будет знать, когда экспортировать файл. Я думаю, что ключевым элементом использования CBC является то, как использовать последний битовый блок для шифрования новой части данных. - person Kelvin; 15.12.2009
comment
Да, если есть требование, чтобы оба зашифрованных значения отображались как одно значение в файле данных, тогда моему решению потребуется больше для работы. Вы можете добавить еще один шаг, чтобы запутать XML, чтобы он выглядел как одно значение, но это может быть не совсем то, что вам нужно. Не уверен, что вы подразумеваете под моей программой, которая не знает, когда экспортировать файл. Как приложение в настоящее время решает, когда экспортировать? - person Cory Charlton; 15.12.2009
comment
Посмотрев на это, это решение, кажется, работает для меня. Я буду использовать его, если не смогу найти способ, используя только поток. Потому что мой сверстник предложил мне это. Спасибо за ваш пост в любом случае очень полезно - person Kelvin; 15.12.2009
comment
Если это ответ на ваш вопрос, можете ли вы принять его, чтобы он больше не находился в корзине «Неотвеченные». Надеюсь, ваш прогресс идет хорошо. - person Cory Charlton; 15.12.2009