0

顧客から新しいライセンス ファイルを生成する必要があります。システムは、公開鍵が DB にあり、ドメイン、有効期限などの情報を含む license.lic ファイルがあり、最後のフィールドが別の鍵である RSA キー検証を使用します。

license file: 87b6fe89-c0b6-431d-96ad-449d055755eb#2020/11/08#True#True#True#True#True#True#True#True#True#True#False#True#True#True#True#True#http://sitesample.com,http://www.sitesample.com,http://localhost#SiIQ6U50tHrfuZD8yCTDq1VJ3teSYnCEDzdJ4RpsLOBMEUcvgn5WiphHFKwYDrKlGUfgnO2iyMRVf2pkFY0c0yuMklBfd31TGlEdZ1uMEFG+WTY42+K5UZzxEs8Y16sNSXKok5fRtF3WRAqckkT3Xkm893zJcr+vcXqdk6rK3r4=

DB row: <RSAKeyValue>Modulus>s0TTPk5n7yS+7gp7VDNZCOnAPYbb24sLGmIviZpayS5aCpxsPKR/R53gbNMII3vBUXyLXg4V99rPffvmTuJuAxw4OPFcGc4cF5w2wiPd7uSCkkjuY9wbyK8YeF4Ge18Zmsl/1ewFM5nVS95XYKQJNR5SY1PAyRVwIfrdtBWTqWk=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>

検証コードは次のとおりです。

byte[] bytes = Encoding.ASCII.GetBytes(string.Concat(new string[]
                {
                    values[0],
                    "#",
                    values[1],
                    "#",
                    values[2],
                    "#",
                    values[3],
                    "#",
                    values[4],
                    "#",
                    values[5],
                    "#",
                    values[6],
                    "#",
                    values[7],
                    "#",
                    values[8],
                    "#",
                    values[9],
                    "#",
                    values[10],
                    "#",
                    values[11],
                    "#",
                    values[12],
                    "#",
                    values[13],
                    "#",
                    values[14],
                    "#",
                    values[15],
                    "#",
                    values[16],
                    "#",
                    values[17],
                    "#",
                    values[18],
                    "#"
                }));
                SHA1Managed sHA1Managed = new SHA1Managed();
                byte[] rgbHash = sHA1Managed.ComputeHash(bytes);
                RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();
                rSACryptoServiceProvider.FromXmlString(registration.public_key);
                byte[] rgbSignature = Convert.FromBase64String(values[19]);
                bool flag = rSACryptoServiceProvider.VerifyHash(rgbHash, CryptoConfig.MapNameToOID("SHA1"), rgbSignature);
                return flag;

この検証は正常に機能しますが、ライセンス ファイルに新しいドメインを挿入する必要があるため、新しいキーを生成する必要があります。

検証コードはライブであり、dll ファイル (ILSpy を使用してこのコードを取得) しか持っていないため、検証コードを変更しません。したがって、新しいライセンス ファイルを作成し、データベースに挿入するのが最善です。

これらのインターネットのサンプルをダウンロードし、生成されたキーを使用しようとしましたが、検証は常に false を返します。私のコードの SHA1 が問題になる可能性があると思います。

http://www.codeproject.com/Articles/10877/Public-Key-RSA-Encryption-in-C-NET および http://www.codeproject.com/Articles/38739/RSA-Private-Key-Encryption

誰か手を貸してくれませんか?

ありがとう!

4

1 に答える 1