Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
144
Task/Substitution-cipher/C-sharp/substitution-cipher.cs
Normal file
144
Task/Substitution-cipher/C-sharp/substitution-cipher.cs
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SubstitutionCipherProject
|
||||
{
|
||||
class SubstitutionCipher
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
doEncDec("e:\\source.txt", "enc.txt", true);
|
||||
doEncDec("enc.txt", "dec.txt", false);
|
||||
Console.WriteLine("Done");
|
||||
Console.ReadKey();
|
||||
}
|
||||
static void doEncDec(String source, String target, bool IsEncrypt)
|
||||
{
|
||||
ITransform trans;
|
||||
|
||||
if (IsEncrypt)
|
||||
trans = new Encrypt();
|
||||
else
|
||||
trans = new Decrypt();
|
||||
|
||||
FileInfo sfi = new FileInfo(source);
|
||||
FileStream sstream = sfi.OpenRead();
|
||||
StreamReader sr = new StreamReader(sstream);
|
||||
|
||||
FileInfo tfi = new FileInfo(target);
|
||||
FileStream tstream = tfi.OpenWrite();
|
||||
TransformWriter tw = new TransformWriter(tstream, trans);
|
||||
StreamWriter sw = new StreamWriter(tw);
|
||||
|
||||
String line;
|
||||
while ((line = sr.ReadLine()) != null)
|
||||
sw.WriteLine(line);
|
||||
sw.Close();
|
||||
}
|
||||
}
|
||||
public interface ITransform
|
||||
{
|
||||
byte transform(byte ch);
|
||||
}
|
||||
public class Encrypt : ITransform
|
||||
{
|
||||
const String str = "xyfagchbimpourvnqsdewtkjzl";
|
||||
byte ITransform.transform(byte ch)
|
||||
{
|
||||
if (char.IsLower((char)ch))
|
||||
ch = (byte)str[ch - (byte)'a'];
|
||||
return ch;
|
||||
}
|
||||
}
|
||||
class Decrypt : ITransform
|
||||
{
|
||||
const String str = "xyfagchbimpourvnqsdewtkjzl";
|
||||
byte ITransform.transform(byte ch)
|
||||
{
|
||||
if (char.IsLower((char)ch))
|
||||
ch = (byte)(str.IndexOf((char)ch) + 'a');
|
||||
return ch;
|
||||
}
|
||||
}
|
||||
class TransformWriter : Stream, IDisposable
|
||||
{
|
||||
private Stream outs;
|
||||
private ITransform trans;
|
||||
|
||||
public TransformWriter(Stream s, ITransform t)
|
||||
{
|
||||
this.outs = s;
|
||||
this.trans = t;
|
||||
}
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public override bool CanSeek
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public override bool CanWrite
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
public override void Flush()
|
||||
{
|
||||
outs.Flush();
|
||||
}
|
||||
|
||||
public override long Length
|
||||
{
|
||||
get { return outs.Length; }
|
||||
}
|
||||
public override long Position
|
||||
{
|
||||
get
|
||||
{
|
||||
return outs.Position;
|
||||
}
|
||||
set
|
||||
{
|
||||
outs.Position = value;
|
||||
}
|
||||
}
|
||||
public override long Seek(long offset, SeekOrigin origin)
|
||||
{
|
||||
return outs.Seek(offset, origin);
|
||||
}
|
||||
|
||||
public override void SetLength(long value)
|
||||
{
|
||||
outs.SetLength(value);
|
||||
}
|
||||
|
||||
public override void Write(byte[] buf, int off, int len)
|
||||
{
|
||||
for (int i = off; i < off + len; i++)
|
||||
buf[i] = trans.transform(buf[i]);
|
||||
outs.Write(buf, off, len);
|
||||
}
|
||||
|
||||
void IDisposable.Dispose()
|
||||
{
|
||||
outs.Dispose();
|
||||
}
|
||||
|
||||
public override void Close()
|
||||
{
|
||||
outs.Close();
|
||||
}
|
||||
|
||||
public override int Read(byte[] cbuf, int off, int count)
|
||||
{
|
||||
return outs.Read(cbuf, off, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue