public static void Main()
string base64 = "MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEYYMMoOaFYAhMO/steotfZyavr6p11SSlwsK9azmsLY7b1b+FLhqMArhB2dqHKboxqKNfvkKDePhpqjui5hcn0Q==";
string sallerName = GetHexString(1, Encoding.UTF8.GetBytes("Bobs Records"));
string vatReg = GetHexString(2, Encoding.UTF8.GetBytes("310122393500003"));
string dateTimeStr = GetHexString(3, Encoding.UTF8.GetBytes("2022-04-25 15:30:00"));
string totalAmt = GetHexString(4, Encoding.UTF8.GetBytes("10000.00"));
string vatAmt = GetHexString(5, Encoding.UTF8.GetBytes("150.00"));
string pk = GetHexString(6, Convert.FromBase64String(base64));
string decString = sallerName + vatReg + dateTimeStr + totalAmt + vatAmt + pk;
Console.WriteLine(HexToBase64(decString));
Console.WriteLine(Convert.ToBase64String(Convert.FromHexString(decString)));
static string GetHexString(int tagNo, byte[] tagValue)
string strTagNo = string.Format("0{0:X}", tagNo);
string tagNoVal = strTagNo.Substring(strTagNo.Length - 2, 2);
string strTagValueLength = string.Format("0{0:X}", tagValue.Length);
string tagValueLengthVal = strTagValueLength.Substring(strTagValueLength.Length - 2, 2);
return tagNoVal + tagValueLengthVal + BitConverter.ToString(tagValue).Replace("-", "");
public static string HexToBase64(string strInput)
var bytes = new byte[strInput.Length / 2];
for (var i = 0; i < bytes.Length; i++)
bytes[i] = Convert.ToByte(strInput.Substring(i * 2, 2), 16);
return Convert.ToBase64String(bytes);