5ced0fec53
- fix warning compilazione - fix auth windows x login
190 lines
6.6 KiB
C#
190 lines
6.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Egw.Core
|
|
{
|
|
/// <summary>
|
|
/// utils x cifrature e Crypto
|
|
/// </summary>
|
|
public class SteamCrypto
|
|
{
|
|
#region Public Methods
|
|
|
|
/// <summary>
|
|
/// decifra un messaggio con una password
|
|
/// </summary>
|
|
/// <param name="Message"></param>
|
|
/// <param name="Passphrase"></param>
|
|
/// <returns></returns>
|
|
public static string DecryptString(string Message, string Passphrase)
|
|
{
|
|
string answ = Message;
|
|
byte[] Results = new byte[8];
|
|
UTF8Encoding UTF8 = new UTF8Encoding();
|
|
|
|
// Step 1. We hash the passphrase using MD5
|
|
// We use the MD5 hash generator as the result is a 128 bit byte array
|
|
// which is a valid length for the TripleDES encoder we use below
|
|
|
|
var HashProvider = MD5.Create();
|
|
//MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
|
|
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));
|
|
|
|
// Step 2. Create a new TripleDESCryptoServiceProvider object
|
|
var TDESAlgorithm = TripleDES.Create();
|
|
//TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
|
|
|
|
// Step 3. Setup the decoder
|
|
TDESAlgorithm.Key = TDESKey;
|
|
TDESAlgorithm.Mode = CipherMode.ECB;
|
|
TDESAlgorithm.Padding = PaddingMode.PKCS7;
|
|
|
|
// Step 4. Convert the input string to a byte[]
|
|
byte[] DataToDecrypt = new byte[8];
|
|
try
|
|
{
|
|
DataToDecrypt = Convert.FromBase64String(Message);
|
|
}
|
|
catch
|
|
{ }
|
|
if (DataToDecrypt != null)
|
|
{
|
|
// Step 5. Attempt to decrypt the string
|
|
try
|
|
{
|
|
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
|
|
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
|
|
}
|
|
finally
|
|
{
|
|
// Clear the TripleDes and Hashprovider services of any sensitive information
|
|
TDESAlgorithm.Clear();
|
|
HashProvider.Clear();
|
|
}
|
|
// Step 6. Return the decrypted string in UTF8 format
|
|
answ = UTF8.GetString(Results);
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// cifra un messaggio con una password
|
|
/// </summary>
|
|
/// <param name="Message"></param>
|
|
/// <param name="Passphrase"></param>
|
|
/// <returns></returns>
|
|
public static string EncryptString(string Message, string Passphrase)
|
|
{
|
|
byte[] Results;
|
|
UTF8Encoding UTF8 = new UTF8Encoding();
|
|
|
|
// Step 1. We hash the passphrase using MD5
|
|
// We use the MD5 hash generator as the result is a 128 bit byte array
|
|
// which is a valid length for the TripleDES encoder we use below
|
|
|
|
var HashProvider = MD5.Create();
|
|
//MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
|
|
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));
|
|
|
|
// Step 2. Create a new TripleDESCryptoServiceProvider object
|
|
var TDESAlgorithm = TripleDES.Create();
|
|
//TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
|
|
|
|
// Step 3. Setup the encoder
|
|
TDESAlgorithm.Key = TDESKey;
|
|
TDESAlgorithm.Mode = CipherMode.ECB;
|
|
TDESAlgorithm.Padding = PaddingMode.PKCS7;
|
|
|
|
// Step 4. Convert the input string to a byte[]
|
|
byte[] DataToEncrypt = UTF8.GetBytes(Message);
|
|
|
|
// Step 5. Attempt to encrypt the string
|
|
try
|
|
{
|
|
ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
|
|
Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
|
|
}
|
|
finally
|
|
{
|
|
// Clear the TripleDes and Hashprovider services of any sensitive information
|
|
TDESAlgorithm.Clear();
|
|
HashProvider.Clear();
|
|
}
|
|
|
|
// Step 6. Return the encrypted string as a base64 encoded string
|
|
return Convert.ToBase64String(Results);
|
|
}
|
|
|
|
/// <summary>
|
|
/// genera hash di una stringa in MD5 (es x hash gravatar)
|
|
/// </summary>
|
|
/// <param name="Message"></param>
|
|
/// <returns></returns>
|
|
public static string getHashStringMD5(string Message)
|
|
{
|
|
string hash = "";
|
|
using (MD5 md5Hash = MD5.Create())
|
|
{
|
|
hash = GetMd5Hash(md5Hash, Message);
|
|
}
|
|
return hash;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Crea un hash MD5
|
|
/// </summary>
|
|
/// <param name="md5Hash"></param>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
public static string GetMd5Hash(MD5 md5Hash, string input)
|
|
{
|
|
// Convert the input string to a byte array and compute the hash.
|
|
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
|
|
|
|
// Create a new Stringbuilder to collect the bytes
|
|
// and create a string.
|
|
StringBuilder sBuilder = new StringBuilder();
|
|
|
|
// Loop through each byte of the hashed data
|
|
// and format each one as a hexadecimal string.
|
|
for (int i = 0; i < data.Length; i++)
|
|
{
|
|
sBuilder.Append(data[i].ToString("x2"));
|
|
}
|
|
|
|
// Return the hexadecimal string.
|
|
return sBuilder.ToString();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verify a hash against a string.
|
|
/// </summary>
|
|
/// <param name="md5Hash"></param>
|
|
/// <param name="input"></param>
|
|
/// <param name="hash"></param>
|
|
/// <returns></returns>
|
|
public static bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
|
|
{
|
|
// Hash the input.
|
|
string hashOfInput = GetMd5Hash(md5Hash, input);
|
|
|
|
// Create a StringComparer an compare the hashes.
|
|
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
|
|
|
|
if (0 == comparer.Compare(hashOfInput, hash))
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#endregion Public Methods
|
|
}
|
|
} |