public string Encrypt(string text, byte[] key) { byte[] message = Encoding.UTF8.GetBytes(text); int toPad = message.Length % BlockSize; byte[] bytes; if (toPad == 0) { bytes = message; } else { toPad = BlockSize - message.Length % BlockSize; bytes = new byte[message.Length + toPad]; for (int i = 0; i < bytes.Length; i++) { if (i < message.Length) { bytes[i] = message[i]; } } } object sessionKeys = MakeKey(key); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < bytes.Length / BlockSize; i++) { byte[] enc = BlockEncrypt(bytes, BlockSize * i, sessionKeys); stringBuilder.Append(ByteToHex(enc)); } return(Converts.StringToBinary(stringBuilder.ToString())); }
public void SendMsg(string msg, int id) { foreach (var item in users) { string answer = DateTime.Now.ToShortTimeString(); string keyForDecrypt; var user = users.FirstOrDefault(i => i.ID == id); if (user != null) { answer += ": " + user.Name + " "; keyForDecrypt = msg.Substring(msg.Length - 44); msg = msg.Remove(msg.Length - 44); msg = serpent.Encrypt(serpent.Decrypt(msg, keyForDecrypt), Convert.FromBase64String(item.Key)); msg = Converts.BinaryToString(msg); msg += item.Key; } answer += msg; item.operationContext.GetCallbackChannel <IServerChatCallback>().MsgCallback(answer); } }