/*
* Created by SharpDevelop.
* User: Petteri Kautonen
* Date: 26.11.2006
* Time: 21:21
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.IO;
using System.Security.Cryptography;
namespace VPKSoft
{
/// <summary>
/// Description of SimpleCipher.
/// </summary>
public class SimpleCipher
{
public SimpleCipher()
{
}
public const int KeyLen = 24;
public const int IVLen = 8;
public static byte [] ValidateKey(byte [] Key)
{
if (Key.Length > KeyLen) {
byte [] Buffer = new byte[KeyLen];
Array.Copy(Key, Buffer, KeyLen);
return Buffer;
} else {
byte [] Buffer = new byte [KeyLen];
Array.Copy(Key, Buffer, Key.Length);
for (int i = Key.Length; i < KeyLen; i++) {
Buffer[i] = (byte)i;
}
return Buffer;
}
}
public static byte [] ValidateIV(byte [] IV)
{
if (IV.Length > IVLen) {
byte [] Buffer = new byte[IVLen];
Array.Copy(IV, Buffer, IVLen);
return Buffer;
} else {
byte [] Buffer = new byte [IVLen];
Array.Copy(IV, Buffer, IV.Length);
for (int i = IV.Length; i < IVLen; i++) {
Buffer[i] = (byte)i;
}
return Buffer;
}
}
public static byte [] Encrypt(byte [] Bytes, byte [] Key, byte [] IV)
{
MemoryStream Ms = new MemoryStream();
TripleDESCryptoServiceProvider Tdcsp = new TripleDESCryptoServiceProvider();
CryptoStream Cs = new CryptoStream(Ms, Tdcsp.CreateEncryptor(Key , IV), CryptoStreamMode.Write);
Cs.Write(Bytes, 0, Bytes.Length);
try {
Cs.Flush();
Cs.FlushFinalBlock();
Cs.Close();
} catch {
}
return Ms.GetBuffer();
}
public static byte [] Decrypt(byte [] Bytes, byte [] Key, byte [] IV)
{
MemoryStream Ms = new MemoryStream();
TripleDESCryptoServiceProvider Tdcsp = new TripleDESCryptoServiceProvider();
CryptoStream Cs = new CryptoStream(Ms, Tdcsp.CreateDecryptor(Key, IV), CryptoStreamMode.Write);
Cs.Write(Bytes, 0, Bytes.Length);
try {
Cs.Flush();
Cs.FlushFinalBlock();
Cs.Close();
} catch {
}
return Ms.GetBuffer();
}
}
}