public CodecOutput <string> Encode(CodecInput <string> input) { var builder = new StringBuilder(); using (MD5 hash = MD5.Create()) { byte[] data = hash.ComputeHash(_encodingFormat.GetBytes(input.Content)); for (int i = 0; i < data.Length; i++) { builder.Append(data[i].ToString(HashToStringFormat, CultureInfo.InvariantCulture)); } } return(new CodecOutput <string> { Content = builder.ToString() }); }
public CodecOutput <string> Decode(CodecInput <string> value) { var gzBuffer = Convert.FromBase64String(value.Content); using (MemoryStream ms = new MemoryStream()) { var conversionLength = BitConverter.ToInt32(gzBuffer, 0); ms.Write(gzBuffer, 4, gzBuffer.Length - 4); var buffer = new byte[conversionLength]; ms.Position = 0; using (var zip = new GZipStream(ms, CompressionMode.Decompress)) zip.Read(buffer, 0, buffer.Length); return(new CodecOutput <string> { Content = _encodingFormat.GetString(buffer, 0, buffer.Length) }); } }
public CodecOutput <string> Encode(CodecInput <string> value) { byte[] buffer = _encodingFormat.GetBytes(value.Content); using (var ms = new MemoryStream()) { using (var zip = new GZipStream(ms, CompressionMode.Compress, true)) zip.Write(buffer, 0, buffer.Length); ms.Position = 0; var compressed = new byte[ms.Length]; ms.Read(compressed, 0, compressed.Length); var gzBuffer = new byte[compressed.Length + 4]; Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length); Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4); return(new CodecOutput <string> { Content = Convert.ToBase64String(gzBuffer) }); } }
public CodecOutput <string> Decode(CodecInput <string> input) { throw new NotSupportedException("Cannot decode MD5"); }