次のようにシリアルキーを作成するアプリケーションがあります。
Take customername
Sign customername using privatekey and sha/dsa algorithm
次に、公開鍵でデコードし、顧客名の一致を確認することで、ライセンスを確認できます
生成されたシリアルがかなり長いことを除けば、これは問題なく機能します。そのため、お客様がシリアル キーを入力するのは現実的ではなく、代わりにファイルでシリアル キーを提供する必要があります。これは、ミスト アプリケーションや動作とはかなり異なり、混乱を招きます。
他の多くのアプリケーションは、購入時にユーザーに Guid を提供するだけです
すなわち 5bd1060b-8608-4817-93ca-207f7c828e2f
ユーザーは、アプリケーションのライセンスを取得するために、電子メール アドレスと GUID を入力する必要があります。
これはユーザーにとってより適切なソリューションのように見えますが、データベースで電子メールアドレス/GUID のペアをチェックしてすべてオンラインで行わない限り、そのようなアプリケーションが無効な GUID から有効な GUID を検証する方法がわかりません。しかし、それ以外の場合はオンラインチェックを必要とせずに、ある種の検証を行うことを本当に望んでいます:
a>インターネット接続/サーバーがダウンしている場合、または b>インターネット アクセスを無効にすることでチェックを回避できる場合、アプリケーションは機能しません
編集:
以下の回答で提案されている私の理解ソリューション:
ユーザーが購入する電子メール アドレス
+ ソルトを取る
SHA1 で暗号化すると 160 ビット ハッシュが得
られる 16 進数表記に変換すると 20 個の 16 進値、つまり 40 文字
が得られる 最後の 8 文字を切り取って Guid
電子メール ユーザーがプログラムに入力する GUI と電子メール アドレス プログラムは、電子メール アドレスを取得し、salt を追加し、ectera を暗号化してチェックすると、有効な GUID が生成されます。
これに関する私の主な問題は、ソルトをプログラムのどこかに保存する必要があることです。したがって、ハッカーがソルトを見つけて、私が何をしているのかを突き止めれば、任意の電子メール アドレスに対して有効なライセンス キー ジェネレーターを作成できます。
別のプログラムの現在の方法:
公開鍵/秘密鍵のペアを生成しました
ユーザーが購入します電子メール
アドレスに署名してライセンスを生成します 生成されたライセンスを
BaseEncode
してユーザーにライセンスを送信し
ます
私の問題は、電子メールアドレスに署名すると長すぎるため、ユーザーがフィールドに入力する代わりにファイルに入れることになりますが、16 進数に変換するのではなく、base64 エンコーディングを行っていることが問題なのかもしれません。
署名の出力の長さは、入力の長さに依存しますか、それとも常に同じですか?
公開鍵でキーを復号化するため、ライセンス キーの一部の文字を削除することはできませんが、生成キーが 40 文字しかない場合は問題ないと思います
この方法の利点は、ハッカーが私のやり方を突き止めたとしても、ライセンス ジェネレーターを作成できないためライセンス ジェネレーターを作成できず、秘密鍵は私のサーバーにしか保存されていないため取得できないことだと思います。彼らは、新しい秘密鍵と公開鍵のペアを作成した場合にのみライセンスを生成でき、アプリケーションで公開鍵がエンコードされている場合、アプリケーションはとにかくライセンスを拒否できました。
もちろん、アプリケーションをハッキングすることはできますが、アプリケーションが定期的に更新されていた場合、これは多大な労力になります。
要約 すると、これを正しく理解しているか、どの方法が最適か、2番目のアプローチで生成されるデータの量.