в настоящее время я использую 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;и зашифровывает сообщение в байты и устанавливает ключи в «», а затем отправляет объект обратно, содержащий байты.так что теперь только оригинальный отправитель может расшифровать его.Это хороший способ сделать это или есть лучший способ?