Это хороший способ шифрования? - PullRequest
0 голосов
/ 27 февраля 2012

в настоящее время я использую System.Security.Cryptography, и это мой код для него:

    private static SymmetricAlgorithm createCryptoServiceProvider(string key, string IV)
    {
        byte[] password;

        using (MD5 md5 = MD5.Create())
            password = md5.ComputeHash(Encoding.UTF8.GetBytes(key));
        var crypt = new TripleDESCryptoServiceProvider();
        byte[] iv = Encoding.UTF8.GetBytes(IV);
        crypt.IV = iv;
        crypt.Key = password;
        return crypt;
    }
    public static byte[] Serialize(object obj, string key, string key2)
    {
        var provider = createCryptoServiceProvider(key, key2);
        using (MemoryStream memory = new MemoryStream())
        {
            using (CryptoStream stream = new CryptoStream(memory, provider.CreateEncryptor(), CryptoStreamMode.Write))
            {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream, obj);
            }
            return memory.ToArray();
        }

    }
    public static object Deserialize(byte[] inBytes, string key, string key2)
    {
        var provider = createCryptoServiceProvider(key, key2);

        using(MemoryStream memory = new MemoryStream(inBytes))
        {
            using (CryptoStream stream = new CryptoStream(memory, provider.CreateDecryptor(), CryptoStreamMode.Read))
            {
                BinaryFormatter formatter = new BinaryFormatter();
                return formatter.Deserialize(stream);
            }
        }
    }

Я использую это, когда готовлюсь отправлять данные через сокет, я создаю объект, который будет иметь ключв приватном поле, а также сохраните ключ, чтобы он знал ключ; когда объект получен на другом клиенте, он использует функцию внутри отправленного объекта, которая использует этот закрытый строковый ключ, key2;и зашифровывает сообщение в байты и устанавливает ключи в «», а затем отправляет объект обратно, содержащий байты.так что теперь только оригинальный отправитель может расшифровать его.Это хороший способ сделать это или есть лучший способ?

1 Ответ

4 голосов
/ 27 февраля 2012

Не пытайтесь делать шифрование самостоятельно.

http://msdn.microsoft.com/en-us/library/system.net.security.sslstream.aspx

В примере кода используется TcpClient, но он должен работать с любым потоковым вводом-выводом, поэтому прямые сокеты также подойдут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...