using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
public class CryptoUtility
{
public static string GetPublicKeyHash(string publicKeyString)
{
SHA256 sha = new SHA256Managed();
byte[] bytes = HexToBin(publicKeyString);
byte[] hashvalue = sha.ComputeHash(bytes);
return Convert.ToBase64String(hashvalue);
}
public static byte[] HexToBin(string hexString)
{
if (hexString == null)
{
throw new ArgumentException("hexString cannot be null", "hexString");
}
if (!(hexString.Length % 2 == 0))
{
throw new ArgumentException("Inappropriate length in hexString.", "hexString");
}
if (Regex.IsMatch(hexString, "[^0-9A-F]+", RegexOptions.IgnoreCase))
{
throw new ArgumentException("Non-hex values in hexString.", "hexString");
}
int arraySize = System.Convert.ToInt32(hexString.Length / 2);
byte[] bytes = new byte[arraySize - 1];
int counter = 0;
for (int i = 0; i <= hexString.Length - 1; i += 2)
{
string hexValue = hexString.Substring(i, 2);
int intValue = Convert.ToInt32(hexValue, 16);
bytes[counter] = Convert.ToByte(intValue);
counter += 1;
}
return bytes;
}
}