현재에서는 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를 사용하는 전송 된 객체 내부의 함수를 사용합니다. 메시지를 바이트로 암호화하고 키를 ""로 설정 한 다음 바이트를 보유한 객체를 다시 보냅니다. 이제는 원래의 보낸 사람 만 해독 할 수 있습니다. 이렇게하는 것이 좋은 방법입니까 아니면 더 좋은 방법이 있습니까?
동의. 암호화가 흥미 롭긴하지만 내 의견으로는 바퀴를 재발 명할 필요가 없습니다. 코드에서 행운을 빈다. – SMT
빠른 답변을 보내 주셔서 감사합니다. 암호화 방법에 대한 많은 질문을 보았지만 어떤 것이 가장 좋았는지 몰랐습니다. – Shredder2500