using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace mkpasswd
{
    class Program
    {
        /// 
        /// Funkcia vygeneruje nahodnu sol pouzivanu pri ukladani odtalcku hesiel pouzivatelov
        /// 
        /// pocet nahodne vygenerovanych bajtov
        /// 
        public static string createSalt( int lengthInBytes )
        {
            // pripravim buffer, do ktoreho vygenerujem nahodne cislo
            byte[] buffer = new byte[ lengthInBytes ];
            // pomocny objekt pre generovanie nahody
            Random rnd = new Random();
            // vygenerujem nahodne cislo
            rnd.NextBytes( buffer );
            // vratim nahodu ako Base64 string
            return Convert.ToBase64String( buffer );
        }
        /// 
        /// Funkcia na vypocet odtlacku zadaneho hesla s pouzitim zadanej soli
        /// 
        /// heslo
        /// sol
        /// 
        public static string crypt( string passwd, string salt )
        {
            // odtlacok budem pocitat z retazca pozostavajuceho z hesla a soli
            string s = passwd + salt;
            // retazec skonvertujem na pole bajtov
            byte[] b = Encoding.UTF8.GetBytes( s );
            // pomocny objekt pre vypocet MD5
            MD5 md5 = MD5.Create();
            // vypocitam odtlacok hesla a soli
            byte[] h = md5.ComputeHash( b );
            // vratim hash ako Base64 string
            return Convert.ToBase64String( h );
        }
        static void Main( string[] args )
        {
            Console.WriteLine( crypt( "heslo", "02SK64Xv" ) );
        }
    }
}