Я знаю, что это, вероятно, общий вопрос, но я нигде не могу найти ответ. Итак, у меня есть ключ байтового массива и значение байтового массива, и мне нужно создать новый 8-байтовый массив, который был зашифрован с помощью DES в С#.
Кодирование DES с ключом безопасности C#
comment
google не работает сегодня?
- person Darin Dimitrov   schedule 18.01.2011
comment
Нет, это не вниз, но я нигде не могу найти, как это сделать. У меня есть ключ и значения и новый массив, который зашифрован значением с этим ключом, но я не могу получить те же результаты в своем коде.
- person Emir Kljucanin   schedule 18.01.2011
comment
@Darin Эй, вот что я сказал!
- person Linus Kleen   schedule 18.01.2011
comment
@Darin, @gore, единственный ТАК пост в этих результатах Google не является прямым обманом. Так что здесь вполне уместный вопрос.
- person Henk Holterman   schedule 18.01.2011
comment
Обратите внимание, что во многих режимах шифрования зашифрованный текст длиннее открытого текста.
- person CodesInChaos   schedule 18.01.2011
Ответы (2)
Вот ваш пример кода. Не забудьте заполнить конечные нули случайными данными, запомнить записанные байты и параметры DES: Key, IV.
С наилучшими пожеланиями ;)
using System.Security.Cryptography;
using System.IO;
namespace hash
{
public static class Program
{
static void Main(string[] args)
{
byte[] data = new byte[10000];
DES des = DES.Create();
int bytesWritten = 0;
data = Encode(data, des, out bytesWritten);
}
private static byte[] Encode(byte[] data, DES des, out int bytesWritten)
{
using (var input = new MemoryStream(data))
using (var output = new MemoryStream())
using (var csp = new DESCryptoServiceProvider())
using (var encStream = new CryptoStream(output, csp.CreateEncryptor(des.Key, des.IV), CryptoStreamMode.Write))
{
int length = 0;
byte[] buffer = new byte[256];
bytesWritten = 0;
while ((length = input.Read(buffer, 0, 256)) > 0)
{
if (length < 256)
{
byte[] pad = new byte[256];
using (var rng = RNGCryptoServiceProvider.Create())
{
rng.GetBytes(pad);
for (int i = 0; i < 256 - length; i++)
{
buffer[length + i] = pad[i];
}
}
encStream.Write(buffer, 0, length);
bytesWritten += length;
break;
}
encStream.Write(buffer, 0, 256);
bytesWritten += length;
}
return output.ToArray();
}
}
}
}
person
Artur Mustafin
schedule
18.01.2011
Отлично: вы добавили предложения с использованием и без чрезмерной вложенности! Многие люди забывают об этом или допускают последовательное использование...
- person Eamon Nerbonne; 28.01.2011
@EamonNerbonne: Надеюсь, когда-нибудь это будет отмечено как правильный ответ;)
- person Artur Mustafin; 02.10.2011
Это то, что я искал :D:D...спасибо :D
private static byte[] Encrypt(byte[] value, byte[] key)
{
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider
{
Mode = CipherMode.ECB,
Padding = PaddingMode.None
};
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(key, key), CryptoStreamMode.Write);
cryptoStream.Write(value, 0, value.Length);
cryptoStream.Close();
return memoryStream.ToArray();
}
person
Emir Kljucanin
schedule
19.01.2011
Во-первых, вы всегда должны заботиться об объеме памяти в своем коде, поэтому вы должны использовать оператор using в объектах FW, реализованных с интерфейсом IDisposable, это верно, потому что, если класс FW использует интерфейс IDisposable, в 99% случаев это будут использоваться неуправляемые ресурсы, такие как дескрипторы (также встречались дескрипторы памяти), ресурсы и т. д. В некоторых случаях вы можете сообщить зависимому объекту принудительно закрыть() при выходе из определенного потока, но это скорее исключение, чем правило. Во-вторых, пожалуйста, не переписывайте мой код, который я уже написал. А в криптографии меньше кода не значит лучше ;)
- person Artur Mustafin; 20.01.2011
@ Артур, хотя ваша точка зрения о
IDisposable
верна, люди могут писать подобные ответы.
- person Marc Gravell; 20.01.2011
@Marc Gravell: Все в порядке, я думаю о других вещах, я уже изучил все советы и приемы, такие как кража ответов, переписывание, неверный ответ, пронирование и другие грязные вещи, которые делают люди;) Иногда это выглядит очень глупо, когда кучка идиотов отдает дань уважения высоко оцененному, но неверному ответу другого пользователя. Странно, иногда даже монстры индустрии (Эрик) не понимают, даже не упоминают в своих ответах самые простые вещи ;)
- person Artur Mustafin; 21.01.2011