Beispiel #1
0
        private static string SignLicenseContract(LicenseContract licenseContract)
        {
            Guid licenseId = licenseContract.LicenseId;

            byte[]           liceseBytes = Encoding.Unicode.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(licenseContract));
            string           licenseText = Convert.ToBase64String(liceseBytes);
            X509Certificate2 pri         = new X509Certificate2(File.ReadAllBytes(@"test.pfx"), "123456");
            var privateKey = pri.GetRSAPrivateKey();

            byte[] hash      = privateKey.SignData(Encoding.Unicode.GetBytes(licenseText), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            string signature = Convert.ToBase64String(hash);

            return($"{licenseId.ToString("N")}-{licenseText}-{signature}");
        }
Beispiel #2
0
        public static void Run()
        {
            string cert = File.ReadAllText("Programs/test._cert");

            var toBeEncryptedContract = new LicenseContract
            {
                NotAfter      = DateTimeOffset.UtcNow.AddMinutes(5),
                NotBefore     = DateTimeOffset.UtcNow,
                LicensedTo    = Guid.Empty.ToString("N"),
                SchemaVersion = "1.0",
                LicenseId     = Guid.NewGuid(),
                Products      = new List <object>
                {
                    new
                    {
                        Amount = 10,
                        Name   = "rrr",
                        Sku    = "aaa"
                    }
                }
            };
            //var str = SignLicenseContract(toBeEncryptedContract);
            var str = "BA72650B45704ED9848647833B33A41D-ewAiAE0AYQBjAGgAaQBuAGUASwBlAHkAIgA6ACIANAA1ADAARgBCADUANgA3AC0AMwBEADkAOQAtAEYAOQA0AEYALQBBADIARAAyAC0AMQA1ADMANwBBAEUANAA5AEYAMQA3ADYAIgAsACIATABpAGMAZQBuAHMAZQBJAGQAIgA6ACIAQgBBADcAMgA2ADUAMABCADQANQA3ADAANABFAEQAOQA4ADQAOAA2ADQANwA4ADMAMwBCADMAMwBBADQAMQBEACIALAAiAFMAYwBoAGUAbQBhAFYAZQByAHMAaQBvAG4AIgA6ACIAMQAuADAAIgAsACIAUgBlAHEAdQBlAHMAdABlAGQAQgB5ACIAOgAiAGgAdQBhAG4AZwByAHUAaQBAAGUAbgBjAG8AbwB0AGUAYwBoAC4AbwBuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0AIgAsACIAUgBlAHEAdQBlAHMAdABlAGQAQQB0ACIAOgAiADIAMAAyADAALQAwADcALQAwADcAVAAwADMAOgA0ADkAOgAzADkALgAxADQAMAAxADEAMwAyACsAMAAwADoAMAAwACIALAAiAE4AbwB0AEIAZQBmAG8AcgBlACIAOgAiADIAMAAyADAALQAwADcALQAwADcAVAAwADMAOgAyADAAOgAwADkALgA3ADgANABaACIALAAiAE4AbwB0AEEAZgB0AGUAcgAiADoAIgAyADAAMgA2AC0AMAA4AC0AMwAxAFQAMAAzADoAMgAwADoAMAA5AC4ANwA4ADQAWgAiACwAIgBMAGkAYwBlAG4AcwBlAGQAVABvACIAOgAiACAAMAA4AGQANwBkADYAZQAwAC0AMwA3AGIAOAAtADQANwAzADgALQA4ADIAYQAyAC0AYQA5AGMANQA4AGUANABmADgANwBkADUAIgAsACIAUAByAG8AZAB1AGMAdABzACIAOgBbAHsAIgBOAGEAbQBlACIAOgAiAGMAbwBuAHMAbwBsAGUAIgAsACIAQQBtAG8AdQBuAHQAIgA6ADEALAAiAFMAawB1ACIAOgAiAGUAbgB0AGUAcgBwAHIAaQBzAGUAIgB9ACwAewAiAE4AYQBtAGUAIgA6ACIAcgBvAGIAbwB0ACIALAAiAEEAbQBvAHUAbgB0ACIAOgAxADAAMAAsACIAUwBrAHUAIgA6ACIAZQBuAHQAZQByAHAAcgBpAHMAZQBfAGIAYQBzAGkAYwAiAH0ALAB7ACIATgBhAG0AZQAiADoAIgByAG8AYgBvAHQAIgAsACIAQQBtAG8AdQBuAHQAIgA6ADEAMAAwACwAIgBTAGsAdQAiADoAIgBlAG4AdABlAHIAcAByAGkAcwBlAF8AcAByAG8AIgB9ACwAewAiAE4AYQBtAGUAIgA6ACIAcwB0AHUAZABpAG8AIgAsACIAQQBtAG8AdQBuAHQAIgA6ADEAMAAwACwAIgBTAGsAdQAiADoAIgBlAG4AdABlAHIAcAByAGkAcwBlACIAfQBdAH0A-DdlASX+udVCSLCQyIWz/ssbLkTNfdeh0DHTxfhrf3g+SzA3Ota7Iua1ryupTCM6OXHiwVRfhnZlp9QU7Gnl4DUJ3pOcUUfFhSHii+2ObIjYatGQLeik6iSwIyCiROJ+ZnBjCIlQOtiPlMbYzH/MW0muNqTNVMjWV+rLa3dLCOxfj5cwXcQH87ijSIMgyUXoMi+YCG+bA0T0//n57LNK8qKW3kJFX1pElKHHDgcukRGwVKb2hOv5L97R25hUuMiwgFwxZDE67PJkb2f53ut7sQlqcoyIN+h+fBjVpFtOwbK2eCQMMly8K8uSqhq3iZ8DebJE6vaTJY1R4r04QrE6aBA==";

            //
            var    licenseParts = str.Split('-');
            string id           = licenseParts[0];
            string payload      = licenseParts[1];
            var    data         = Encoding.Unicode.GetString(Convert.FromBase64String(payload));
            string signature    = licenseParts[2];


            X509Certificate2 certificate = new X509Certificate2(Encoding.UTF8.GetBytes(cert));

            byte[] buffer = Encoding.Unicode.GetBytes(payload);

            using (RSA rsa = certificate.GetRSAPublicKey())//验证签名
            {
                var hash2  = Convert.FromBase64String(signature);
                var result = rsa.VerifyData(buffer, hash2, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
                if (result)
                {
                    string strData = Encoding.Unicode.GetString(Convert.FromBase64String(payload));
                }
            }



            X509Certificate2 pri = new X509Certificate2(File.ReadAllBytes(@"Programs/test._pfx"), "123456");
            X509Certificate2 pub = new X509Certificate2(Encoding.UTF8.GetBytes(cert));

            RSA RSAPrivate = pri.GetRSAPrivateKey();
            RSA RSAPublic  = pub.GetRSAPublicKey();

            byte[] dataToEncrypt = Encoding.Unicode.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(toBeEncryptedContract));
            string licenseText   = Convert.ToBase64String(dataToEncrypt);

            byte[] hash       = RSAPrivate.SignData(dataToEncrypt, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            var    signature2 = Convert.ToBase64String(hash);
            bool   a          = RSAPublic.VerifyData(dataToEncrypt, hash, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

            Console.ReadLine();
        }