Skip to content

Instantly share code, notes, and snippets.

@jjekson
Created December 1, 2020 16:30
Show Gist options
  • Save jjekson/28251f08d69a549f9276b425b5a6bcec to your computer and use it in GitHub Desktop.
Save jjekson/28251f08d69a549f9276b425b5a6bcec to your computer and use it in GitHub Desktop.
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
public class Program
{
public static void Main()
{
Certificate Certificate = new Certificate();
byte[] hash = {72, 254, 19, 51, 175, 190, 42, 28, 129, 124, 105, 23, 3, 216, 208, 143, 179, 200, 233, 30};
Console.WriteLine(ToReadableByteArray(Certificate.CreateSignature(hash)));
}
public static string ToReadableByteArray(byte[] bytes)
{
return string.Join(", ", bytes);
}
}
public class Certificate
{
private X509Certificate2 pfxCert;
public Certificate()
{
pfxCert = GetCert();
}
private X509Certificate2 GetCert()
{
var pfxBase64Encoded =
@"MIACAQMwgAYJKoZIhvcNAQcBoIAkgASCBAAwgDCABgkqhkiG9w0BBwGggCSABIIEADCCBa4wggWqBgsqhkiG9w0BDAoBAqCCBO4wggTqMBwGCiqGSIb3DQEMAQMwDgQIqhIuobZGpzcCAgfQBIIEyNZ2cNgMM5C+3t7tQ/c8KCoXmw1lcmPrBTu45btS40iuAMAjN7ssRfUFTFle6/FI6mcyHvyUtgatAAgv+m40jGFMRtA2YFI7oY7J80ok8vnMJlHVdPCzqpm0rXqgDFbeUSVsQUP6JxuNGfgpn9fKaz9k+5DZMvlmFHSE16/8Qb5rIxY6P4AWCBYyvt/YImpH172tK2DTc5xj50Mv3OqSq3CKVY0c/w5ArtfVs/8JFDYR0EzKG1dhFj+fx9vhjm4afRX+K+Wypiw8OkYJ/GjNE/z5/BRqwY8PZEo/t/KCcGMxWPAlOYTnhIxDmlNe6wMgxzDcBGS5gPxbgaouyjA8YVMmgLm4B6rEeTA3rvM68CPQBNuHnhezB/vfiGrPRWiJryvmM3lAMi+L+Iffd6zI7XxhIAKSHTkSPUMj2eSyToJsB/bvGA94TsHYTxsyD4rtAinKWGAxImCgxpaTMCUfSj1KvUkCqjeoBB8WJ19HhYaDtgTJJ7QDSRDGO4CsVuFGymxffsy5wpQ3fGp8+FZV05Q9re5+7GrSdOeRIYLWgowaVfhPfXH+/ECJ6I3s9LLHx6rRiS8bFPiNP+G8OpeimOwDnSxiNrgpLxgEcjlzn+zUUT16qj4OPi1NsMiIIerrFv7QazT4Ndz6rOQ2gMRkDnNfYo3ezVxGtcV4qo/7UhacBxJqz7BhoIVq6ZKICGMVMq4B2QHYFXWsdcvr70kVbM/vTrQu8hNuRE3Ju2tOisv9iUsjP89P9wHY34sv2asgH+ETrd7BPwjLUDNoPSy4BZLeUtRUcfWmUT4T1BTSe+pmQOsFZMFLXzqQT3i5J7cBIu0msBk2MmXTcHYyOVOy00T+PCsLz0qdfXIzDmZQQ6KjD8YtCpIp0rBHrBqXzJnb5VhJ7ODYy8MvyNwnsEbif5XuNFzUrPCvWUN5Hgf+j/j6Z71vNIMWxcEbr2hs7XHaFrud2XtPrAeida6/EVpLIXt2QYspWDvJ5zQ1KBbuB0HXHr+H19NrP4sg6/UX4wgT0o5RkiVdsbJWRynUALBEfaZfUQQdZun3OZwpluh8HeeV2XgMRMKhSkR3HeDnQITdPb9/dOeVRsSXOcW16p60A8b9WvXw3Y48y2SAZNQ3MeC41mkc+yAUUcOkpERbjI09y4PIs8WVLYv7FY7uu5OOeUx/YCutlmCp1T5Skrxrn+Cb5asUE4VbCFoI7sydWG9NM3q5eQzPkNDtlbvmuDgqaTacGphbSBNonHJSBIIEAH2vkkkf7y+JpcOJWLr9DT8xSVpQzXYbBIIBshwe7UyEBEWX8AnGiMPvVPCZuYDn7tYfCNeMNvF3pr0yVWPu30I8E4rwkQ9KrA20zyJ2Vr7ELQxG2jxCoZwXc2+W+z3rAR5UB307s1h6ISMzlR1LXUI2nAgCZVtLKHwfScZxX8Qq1x4JaEXiODvrU3rGj8DWe/BG/+tnESm2hUqsGkBSuffVf5NXk5X5vf1s5AgAUA31yLAL/ijtm2LTAXB8JMkPglBxPyCVkNuOBlXrhbqZ4vYLkHA9VI6NiZ7deqLH09BDgDxWjk9F4pGf6Qj24IYpRDFF+/NiiiT/OKct3g55B+g8UEZpD2kgGhP5PZJfWpElWUa6OgkmdTwn/gTbNLcLqy8EMYGoMIGHBgkqhkiG9w0BCRQxeh54AEMATgA9AHcAdwB3AC4AZABpAG0AaQAuAGYAcgAsAE8APQBJAG4AdABlAHIAbgBlAHQAIABXAGkAZABnAGkAdABzACAAUAB0AHkAIABMAHQAZAAsAFMAVAA9AFMAbwBtAGUALQBTAHQAYQB0AGUALABDAD0ARgBSMBwGCSqGSIb3DQEJFTEPBA0xNjA2ODE3NTM5MDkzAAAAAAAAMIAGCSqGSIb3DQEHBqCAMIACAQAwgAYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIwf372Y8tBrECAgfQoIAEggS4WUtwFddxebQy5aMCiSjIcPyAhO6yRi+MVzUcY/tyEBe/nj+eR9qk56U3Lrs7InpJyM/HbdeLscXMZ7j/SASiseMpHVaooshyCFFXQuFJKo2OroIb5sEQegMBVvQJI3tnZiTz2iHKbhdTWaG5Us74uBeY3NgXpAKrI1Hj9sqmblhfh+QaLpO/SnGmOXpqu/Au+5SrZ6zDFrZRZiccw1fJNvJULzLW9lgCJwhOFNCiYPBo2IGnBBbdlR8N4ue9qzBqF6AgJmYXrOu6IWQuvNzw1ilylTQ/gSrb2bQPWDsDBZkw7yV3+mQI23BAM4RmqVPlWuU843WLFSVHjDjnZtMT0/a0uL/S4lRGD4rFZHbnLKzPSRI5drPfP/0yyJv/ApP6fpLIQd5D99kjDfL5T3qw0AJlrcohk7Dh0/PYxoOLqCzlTuCKVTyugjCwLu37HRr8maEOcAIbKLBPOeJ+6OcKFJsZshgIgblsmIHNDXGCSJdvl2l0Xcf700WtFwFw6WWgeq74sbkPXHr3m7JVPX7hyEneKAMUd2w6UOF2pzvboaIJs6c3uEH2pkhA6bDcA2+0FAl/IHzAekan3JaED0YvYIeWpRd3v14r6NOV26ArQd3amAJr5oD419IawWvfiFexWSkPhGE7X/wEggLc3uKPPK+he4cWQQktVP758IxQ5sDgA+ptifDq5QhpNPw9AYK5ao+/FtnNXK5qST1tQjGw/Z1ftCBLpmgW5DKol6JfM1st8xeHgJK3O+FknGvuoQUhKa50lrGg5jt29GEFR3CCZ67onTZfrzoZg2ErfuBxCmIL+rLjW1L+2kThQ4F06dh4tT11BQJb8BgaKv3b63mgd0mfHs3BdNDqKpEFUXjrj85Hh58zzuSXB4oFh/auo/i0M64iWiCv6dF/UzMksW5icDOpwTFlC8scJkuzUMAldeMWtAHQtQOHPMq96OTyaJevoW5fqavoPntJY/TNz53LCn66jGF0q8JUutZuhHaTArj1cBqfFm3nuClH+06dlvvLCgb3412WA/7haX25dWhzCwcYwLOrURsOwjgzWiqtrrHLSn/3X2XW9RpKSuwpv8UnJUWtSXVWuyzCTqZaDp88UosRyn1LnB3dLw9zXPjwIcLWZPvA7UPWjHsINrRpWRwU881mSepsBE33zgbvN9AKqswEcslYZpTnu8SFN+aXMAQzPJHcU7Z3WBfQNsUCtWGbCc2CQ1f0OMiYPmEWFjk/ooPyOSv+GeV73wBwmfkxfGim0ge2DFGi/aNmreUoe4trMll8b4pHxa9kyElo6Cm2yvW/P1Hrr5fOspkN6eQQmjgcdihn4FSPnCe5sQCN7XqZaNqvo+7O+Ig8dZjVo2wUBdbtzXgfNbJPHlsPmaH9J/g/32nrglxm/pLqIS9qa8tV/JLmH3Gz5sd+7S/LLL7cwk34l7tb4+kiOgewuLjopxmHA9sw72Dd8JW4qh5vxrSirRU2EzQtPdrv8RwZbNpBlod8su6hvxKR4kqkNPNpbZYsJmUYOfK947pxP8ntOkKBxh7saKg7EGQRk7o+63lLdW+py53fU134W8nim01i54j/yFTTqfzmqEO2LQhawxTmZz0Kc22hby7QU02uAAAAAAAAAAAAAAAAAAAAAAAAMDEwITAJBgUrDgMCGgUABBQXazukVIIyseASg8rcBKu5moVCNAQIgzQf9hjKJbkCAgfQAAA=";
X509Certificate2 cert = new X509Certificate2(Convert.FromBase64String(pfxBase64Encoded), "Password");
return cert;
}
// The part which is different in C# and PHP
public byte[] CreateSignature(byte[] hash)
{
RSAPKCS1SignatureFormatter signatureFormatter = new RSAPKCS1SignatureFormatter(pfxCert.PrivateKey);
signatureFormatter.SetHashAlgorithm("SHA1");
return signatureFormatter.CreateSignature(hash);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment