私はRSAを使用してライセンスシステムを実装しようとしています。
原則は簡単です。バックエンドは証明書の秘密鍵を使用してライセンスを生成し署名し、フロントエンドは提供された署名でライセンスを検証し、ライセンスの完全性と起源を保証します。
バックエンドはasp.net mvc(古典的でコアではない)Webサイトです。フロントエンドはjsrsasignライブラリを利用したjavascript/typescriptです。ここ
は私の署名法(バックエンド)である:ここではRSAとjsrsasignとCとの署名
var binarySerializedLicense = Encoding.Unicode.GetBytes(serializedLicense);
var rsaEncryptor = (RSACryptoServiceProvider)_signingCertificate.PrivateKey;
var signatureData = rsaEncryptor.SignData(binarySerializedLicense, new SHA1CryptoServiceProvider());
var signature = ByteArrayToString(signatureData);
は私の方法(バックエンド)の検証です:
var signatureData = StringToByteArray(signature);
var licenseData = Encoding.Unicode.GetBytes(serializedLicense);
var rsaEncryptor = (RSACryptoServiceProvider)_signingCertificate.PrivateKey;
var isLicenseValid = rsaEncryptor.VerifyData(licenseData, new SHA1CryptoServiceProvider(), signatureData);
を私は今、私はフロントエンドのPOCを持ってthis post
から六角の変換方法を取りましたjsrsasignの実装。
<script type="text/javascript">
function verifyData() {
var pem = "-----BEGIN PUBLIC KEY-----\
...\
im7MVM73FyE6BFb2cv3IZWUCAwEAAQ==\
-----END PUBLIC KEY-----";
var sig = new KJUR.crypto.Signature({ "alg": "SHA1withRSA" });
sig.init(pem);
sig.updateString($("#data").val());
var isValid = sig.verify($("#signature").val());
alert(isValid);
}
function signData() {
var pem = "-----BEGIN PRIVATE KEY-----\
...\
-----END PRIVATE KEY-----";
var sig = new KJUR.crypto.Signature({ "alg": "SHA1withRSA" });
sig.init(pem);
sig.updateString($("#data").val());
$("#signature").val(sig.sign());
}
$(function() {
$("#verify").click(function() {
verifyData();
});
$("#sign").click(function() {
signData();
});
});
</script>
Signature <input type='text' id='signature' /><br />
Data <input type='text' id='data' /><br />
<button id="verify">Verify</button>
<button id="sign">Sign</button>
私がいる問題はjsrsasignによって生成された署名とasp.net MVCサイトによって生成された1が異なっていることです。
各署名/検証往復は両方の技術で動作します。
私はエンコーディングとたくさんのもので遊んできましたが、動作させることはできません。だから私の質問です:どのように私はこのシナリオを正しく動作させることができますか?