using System.Collections.Generic;
using System.Threading.Tasks;
using System.Security.Cryptography;
public static void Main()
Console.WriteLine(BCPasswordHash.ENCHash("password"));
public class BCPasswordHash
public static string ENCHash(string value) {
string decripted = string.Empty;
byte[] salt = Encoding.UTF8.GetBytes("9u7FbJQFLb3WLRvr");
int iterationCount = 1000;
PKCSKeyGenerator kp = new PKCSKeyGenerator();
ICryptoTransform crypt = kp.Generate(value, salt, iterationCount, 1);
byte[] bytes = Encoding.UTF8.GetBytes("9u7FbJQFLb3WLRvr");
byte[] resultBytes = crypt.TransformFinalBlock(bytes, 0, bytes.Length);
decripted = Convert.ToBase64String(resultBytes);
public class PKCSKeyGenerator {
byte[] key = new byte[8], iv = new byte[8];
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
public byte[] Key { get { return key; } }
public byte[] IV { get { return iv; } }
public ICryptoTransform Encryptor { get { return des.CreateEncryptor(key, iv); } }
public PKCSKeyGenerator() { }
public PKCSKeyGenerator(String keystring, byte[] salt,
int md5iterations, int segments) {
Generate(keystring, salt, md5iterations, segments);
public ICryptoTransform Generate(String keystring, byte[] salt,
int md5iterations, int segments) {
new byte[HASHLENGTH * segments];
psbytes = Encoding.UTF8.GetBytes(keystring);
byte[] data00 = new byte[psbytes.Length + salt.Length];
Array.Copy(psbytes, data00, psbytes.Length);
Array.Copy(salt, 0, data00,
psbytes.Length, salt.Length);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] hashtarget = new byte[HASHLENGTH +
for (int j = 0; j < segments; j++) {
if (j == 0) result = data00;
Array.Copy(result, hashtarget, result.Length);
Array.Copy(data00, 0, hashtarget, result.Length, data00.Length);
for (int i = 0; i < md5iterations; i++)
result = md5.ComputeHash(result);
Array.Copy(result, 0, keymaterial, j * HASHLENGTH,
Array.Copy(keymaterial, 0, key, 0, 8);
Array.Copy(keymaterial, 8, iv, 0, 8);