顧客から新しいライセンス ファイルを生成する必要があります。システムは、公開鍵が 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
誰か手を貸してくれませんか?
ありがとう!