using System.Security.Cryptography;
public static void Main()
string pan = "5559405048128222";
string pinEncryptionKey = "EEBD88FF1C4868E0BF72B75DC3844E16";
string pinBlock = "04" + pin + "FFFFFFFFFF";
string panBlock = "0000" + pan.Substring(pan.Length - 13, 12);
byte[] pinBlockBytes = HexStringToBytes(pinBlock);
byte[] panBlockBytes = HexStringToBytes(panBlock);
byte[] xorResult = new byte[8];
for (int i = 0; i < 8; i++)
xorResult[i] = (byte)(pinBlockBytes[i] ^ panBlockBytes[i]);
byte[] keyBytes = HexStringToBytes(pinEncryptionKey);
byte[] encryptedPinBlock = Encrypt3DES(xorResult, keyBytes);
Console.WriteLine("Generated PIN Block (Encrypted): " + BitConverter.ToString(encryptedPinBlock).Replace("-", ""));
static byte[] HexStringToBytes(string hex)
byte[] bytes = new byte[hex.Length / 2];
for (int i = 0; i < hex.Length; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
static byte[] Encrypt3DES(byte[] data, byte[] key)
using (TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider())
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.None;
using (ICryptoTransform encryptor = tdes.CreateEncryptor())
return encryptor.TransformFinalBlock(data, 0, data.Length);