public static void Main(string[] args)
string encKey = "C4838093BFF13845BB0D51F1BA02C557";
string macKey = "7CCDE99C2B2208D1B26A5C3AB985A50E";
string clientId = "34707786";
string msisdn = "905335575190";
string reqRefNumber = "587";
string timeZone = GetTimezone();
string datetime = DateTime.Now.ToString("yyyyMMddHHmmss");
string msisdnValidated = "01";
string validationType = "00";
string merchantType = "00";
string vposCurrencyCode = "TRY";
string vposMerchantId = "";
string VposMerchantTerminalId = "";
string vposMerchantEmail = "";
string vposTerminalUserId = "";
string vposProvisionUserId = "";
string vposProvisionPassword = "";
string vposStoreKey = "";
string vposPosnetId = "";
string dataToEncrypt = "";
dataToEncrypt += Constants.TAG_CLIENT_ID + clientId.Length.ToString("X2") + Ascii2Hex(clientId);
Console.WriteLine(dataToEncrypt);
dataToEncrypt += Constants.TAG_TIMEZONE + "01" + timeZone;
dataToEncrypt += Constants.TAG_DATETIME + datetime.Length.ToString("X2") + Ascii2Hex(datetime);
dataToEncrypt += Constants.TAG_MSISDN + msisdn.Length.ToString("X2") + Ascii2Hex(msisdn);
dataToEncrypt += Constants.TAG_REQ_REF_NUMBER + reqRefNumber.Length.ToString("X2") +
dataToEncrypt += Constants.TAG_USER_ID + userId.Length.ToString("X2") + Ascii2Hex(userId);
dataToEncrypt += Constants.TAG_CLIENT_VALIDATED_MSISDN + "01" + msisdnValidated;
dataToEncrypt += Constants.TAG_VALIDATION_TYPE + "01" + validationType;
dataToEncrypt += Constants.TAG_MERCHANT_TYPE + "01" + merchantType;
dataToEncrypt += Constants.TAG_BANK_ICA + bankICA.Length.ToString("X2") + Ascii2Hex(bankICA);
dataToEncrypt += Constants.TAG_VPOS_CURRENCY_CODE + vposCurrencyCode.Length.ToString("X2") +
Ascii2Hex(vposCurrencyCode);
dataToEncrypt += Constants.TAG_VPOS_MERCHANT_ID + vposMerchantId.Length.ToString("X2") +
Ascii2Hex(vposMerchantId);
dataToEncrypt += Constants.TAG_VPOS_MERCHANT_TERMINAL_ID +
VposMerchantTerminalId.Length.ToString("X2") + Ascii2Hex(VposMerchantTerminalId);
dataToEncrypt += Constants.TAG_VPOS_MERCHANT_EMAIL + vposMerchantEmail.Length.ToString("X2") +
Ascii2Hex(vposMerchantEmail);
dataToEncrypt += Constants.TAG_VPOS_TERMINAL_USER_ID + vposTerminalUserId.Length.ToString("X2") +
Ascii2Hex(vposTerminalUserId);
dataToEncrypt += Constants.TAG_VPOS_PROVISION_USER_ID + vposProvisionUserId.Length.ToString("X2") +
Ascii2Hex(vposProvisionUserId);
dataToEncrypt += Constants.TAG_VPOS_PROVISION_PASSWORD + vposProvisionPassword.Length.ToString("X2") +
Ascii2Hex(vposProvisionPassword);
dataToEncrypt += Constants.TAG_VPOS_STORE_KEY + vposStoreKey.Length.ToString("X2") +
dataToEncrypt += Constants.TAG_VPOS_POSNET_ID + vposPosnetId.Length.ToString("X2") +
if ((dataToEncrypt.Length % 32) != 0) {
if ((dataToEncrypt.Length % 32) == 0)
string encryptedData = "";
using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) {
using (System.Security.Cryptography.AesManaged AES = new System.Security.Cryptography.AesManaged()
AES.Key = StringToByteArray(encKey);
AES.IV = StringToByteArray("00000000000000000000000000000000");
AES.Padding = System.Security.Cryptography.PaddingMode.None;
AES.Mode = System.Security.Cryptography.CipherMode.CBC;
byte[] bytesToBeEncrypted = StringToByteArray(dataToEncrypt);
new System.Security.Cryptography.CryptoStream(ms, AES.CreateEncryptor(),
System.Security.Cryptography.CryptoStreamMode.Write)) {
cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
encryptedData = ByteArrayToString(ms.ToArray());
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(macKey);
using (System.Security.Cryptography.HMACSHA1 hmac = new System.Security.Cryptography.HMACSHA1(keyByte)
mac = ByteToString(hmac.ComputeHash(encoding.GetBytes(encryptedData)));
string token = encryptedData + mac;
Console.WriteLine(token);
private static string GetTimezone()
TimeSpan tmpTimeZone = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
if (tmpTimeZone.Hours > 0) {
timeZone += tmpTimeZone.Hours.ToString("X1");
else if (tmpTimeZone.Hours == 0) {
timeZone += (tmpTimeZone.Hours * -1).ToString("X1");
private static string ByteArrayToString(byte[] ba)
string hex = BitConverter.ToString(ba);
return hex.Replace("-", "");
private static string ByteToString(byte[] buff)
for (int i = 0; i < buff.Length; i++) {
sbinary += buff[i].ToString("X2");
private static byte[] StringToByteArray(string hex)
return Enumerable.Range(0, hex.Length)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
private static string Ascii2Hex(string ascii)
byte[] temp = Encoding.Default.GetBytes(ascii);
var hexString = BitConverter.ToString(temp);
Console.WriteLine(ascii);
Console.WriteLine(hexString+"\n -----------");
return hexString.Replace("-", "");
public const string TAG_CLIENT_ID = "FF01";
public const string TAG_TIMEZONE = "FF02";
public const string TAG_DATETIME = "FF03";
public const string TAG_MSISDN = "FF04";
public const string TAG_REQ_REF_NUMBER = "FF05";
public const string TAG_USER_ID = "FF06";
public const string TAG_CLIENT_VALIDATED_MSISDN = "FF07";
public const string TAG_VALIDATION_TYPE = "FF08";
public const string TAG_MERCHANT_TYPE = "FF09";
public const string TAG_VPOS_CURRENCY_CODE = "FF0A";
public const string TAG_VPOS_MERCHANT_ID = "FF0B";
public const string TAG_VPOS_MERCHANT_TERMINAL_ID = "FF0C";
public const string TAG_VPOS_MERCHANT_EMAIL = "FF0D";
public const string TAG_VPOS_TERMINAL_USER_ID = "FF0E";
public const string TAG_VPOS_PROVISION_USER_ID = "FF0F";
public const string TAG_VPOS_PROVISION_PASSWORD = "FF10";
public const string TAG_VPOS_STORE_KEY = "FF11";
public const string TAG_VPOS_POSNET_ID = "FF12";
public const string TAG_BANK_ICA = "FF13";