160 lines
6.1 KiB
C#
160 lines
6.1 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Text;
|
|||
|
using System.Security.Cryptography;
|
|||
|
using System.IO;
|
|||
|
|
|||
|
namespace SafeMobileLib
|
|||
|
{
|
|||
|
static public class Encryption
|
|||
|
{
|
|||
|
|
|||
|
static public byte[] Encrypt(byte[] inputArray, EncryptionAlgorithm algorithm)
|
|||
|
{
|
|||
|
if (algorithm == EncryptionAlgorithm.Aes256)
|
|||
|
return AesEncrypt(inputArray);
|
|||
|
else if (algorithm == EncryptionAlgorithm.Des64)
|
|||
|
return DesEncrypt(inputArray);
|
|||
|
else if (algorithm == EncryptionAlgorithm.None)
|
|||
|
return inputArray;
|
|||
|
else
|
|||
|
throw new ApplicationException("No ecryption defined for algorithm " + algorithm);
|
|||
|
}
|
|||
|
|
|||
|
static public byte[] Decrypt(byte[] dataToDecrypt, EncryptionAlgorithm algorithm)
|
|||
|
{
|
|||
|
if (algorithm == EncryptionAlgorithm.Aes256)
|
|||
|
return AesDecrypt(dataToDecrypt);
|
|||
|
else if (algorithm == EncryptionAlgorithm.Des64)
|
|||
|
return DesDecrypt(dataToDecrypt);
|
|||
|
else if (algorithm == EncryptionAlgorithm.None)
|
|||
|
return dataToDecrypt;
|
|||
|
else
|
|||
|
throw new ApplicationException("No decryption defined for algorithm " + algorithm);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#region DES64 encryption
|
|||
|
|
|||
|
private static byte[] bytes = ASCIIEncoding.ASCII.GetBytes("SafeMobi"); //DES 64bit !
|
|||
|
|
|||
|
private static byte[] DesEncrypt(byte[] inputArray)
|
|||
|
{
|
|||
|
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
|
|||
|
MemoryStream memoryStream = new MemoryStream();
|
|||
|
CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(bytes, bytes), CryptoStreamMode.Write);
|
|||
|
|
|||
|
cryptoStream.Write(inputArray,0,inputArray.Length);
|
|||
|
|
|||
|
cryptoStream.Close(); memoryStream.Close();
|
|||
|
return memoryStream.ToArray();
|
|||
|
}
|
|||
|
|
|||
|
private static byte[] DesDecrypt(byte[] DataToDecrypt)
|
|||
|
{
|
|||
|
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
|
|||
|
MemoryStream memoryStream = new MemoryStream();
|
|||
|
CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(bytes, bytes), CryptoStreamMode.Write);
|
|||
|
|
|||
|
cryptoStream.Write(DataToDecrypt, 0, DataToDecrypt.Length);
|
|||
|
cryptoStream.Close(); memoryStream.Close();
|
|||
|
return memoryStream.ToArray();
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region AES256 Encryption
|
|||
|
|
|||
|
private static byte[] aesKey = new byte[32] { 206, 156, 144, 76, 93, 170, 62, 42, 240, 216, 24, 84, 160, 145, 53, 37,
|
|||
|
28, 37, 139, 150, 18, 10, 84, 151, 239, 29, 123, 240, 13, 168, 40, 72};
|
|||
|
|
|||
|
private static byte[] aesIV = new byte[16] { 153, 54, 221, 187, 162, 171, 189, 223, 248, 123, 97, 197, 148, 196, 29, 59 };
|
|||
|
|
|||
|
private static byte[] AesEncrypt(byte[] inputArray)
|
|||
|
{
|
|||
|
|
|||
|
byte[] encrypted = null;
|
|||
|
using (AesCryptoServiceProvider cryptoProvider = new AesCryptoServiceProvider())
|
|||
|
{
|
|||
|
using (MemoryStream memoryStream = new MemoryStream())
|
|||
|
{
|
|||
|
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(aesKey, aesIV), CryptoStreamMode.Write))
|
|||
|
{
|
|||
|
cryptoStream.Write(inputArray, 0, inputArray.Length);
|
|||
|
}
|
|||
|
encrypted = memoryStream.ToArray();
|
|||
|
}
|
|||
|
}
|
|||
|
return encrypted;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private static byte[] AesDecrypt(byte[] DataToDecrypt)
|
|||
|
{
|
|||
|
byte[] decrypted = null;
|
|||
|
using (AesCryptoServiceProvider cryptoProvider = new AesCryptoServiceProvider())
|
|||
|
{
|
|||
|
using (MemoryStream memoryStream = new MemoryStream())
|
|||
|
{
|
|||
|
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(aesKey, aesIV), CryptoStreamMode.Write))
|
|||
|
{
|
|||
|
cryptoStream.Write(DataToDecrypt, 0, DataToDecrypt.Length);
|
|||
|
}
|
|||
|
decrypted = memoryStream.ToArray();
|
|||
|
}
|
|||
|
}
|
|||
|
return decrypted;
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
}
|
|||
|
|
|||
|
public enum EncryptionAlgorithm
|
|||
|
{
|
|||
|
Des64,
|
|||
|
Aes256,
|
|||
|
None
|
|||
|
}
|
|||
|
|
|||
|
public class TESEncryption
|
|||
|
{
|
|||
|
private static string key = "safemobileTriple";
|
|||
|
|
|||
|
public static string Encryption(string input)
|
|||
|
{
|
|||
|
return Encrypt(input, key);
|
|||
|
}
|
|||
|
|
|||
|
public static string Encrypt(string input, string key)
|
|||
|
{
|
|||
|
byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input);
|
|||
|
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
|
|||
|
tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
|
|||
|
tripleDES.Mode = CipherMode.ECB;
|
|||
|
tripleDES.Padding = PaddingMode.PKCS7;
|
|||
|
ICryptoTransform cTransform = tripleDES.CreateEncryptor();
|
|||
|
byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
|
|||
|
tripleDES.Clear();
|
|||
|
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
|
|||
|
}
|
|||
|
|
|||
|
public static string Decrypt(string input)
|
|||
|
{
|
|||
|
return Decrypt(input, key);
|
|||
|
}
|
|||
|
|
|||
|
public static string Decrypt(string input, string key)
|
|||
|
{
|
|||
|
byte[] inputArray = Convert.FromBase64String(input);
|
|||
|
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
|
|||
|
tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
|
|||
|
tripleDES.Mode = CipherMode.ECB;
|
|||
|
tripleDES.Padding = PaddingMode.PKCS7;
|
|||
|
ICryptoTransform cTransform = tripleDES.CreateDecryptor();
|
|||
|
byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
|
|||
|
tripleDES.Clear();
|
|||
|
return UTF8Encoding.UTF8.GetString(resultArray);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|