8

そのため、特定のユーザー/見込み客に関連付けることができるコードを生成し、金額を組み込む必要があります。クライアント アプリケーションがコードの有効性を確認し、マネージャーが意図する割引を適用できるように、コードは可逆的である必要があります。

コードをできるだけ短くしたいのですが、セールスマンが自分でいじり始めることができないように、コードを十分に難読化する必要があります。

数値をバウンスしたり、円周率で割ったり、16 進数に変換したりなど、自分で何かを考え出すことはできますが、コミュニティからのアイデアやベスト プラクティスに本当に興味があります。

私はこれを C# で行っていますが、どの言語のメソッドも翻訳できると期待しています。

編集:明確にする。このようなものを前もって保存することはできません。コードはオンザフライで構築し、すべての情報を一緒に運ぶ必要があります。

例えば。セールスマン 14 は顧客 773 について電話をかけ、注文から 500 ドル引きたいと考えています。14、773、および 500 はクーポン コードに含まれている必要があり、セールスマンがコードにキーを入力した後、クライアント アプリで抽出できる必要があります。

4

7 に答える 7

7

署名用の公開鍵と秘密鍵のペアを生成します。秘密鍵を使用して、ユーザー ID とクーポン値の組み合わせにデジタル署名します。クーポン値 + 署名をクーポン コードとして発行し、文字と数字などを使用してエンコードします。クライアント アプリケーションは、最初に署名されたデータの組み合わせを再作成し (たとえば、ユーザー ID をクーポン値の先頭に追加する)、デジタル署名を検証することによってコードを検証します。

于 2008-10-13T12:36:52.057 に答える
5

非対称暗号化の場合のように聞こえます。公開鍵を全員に配布して、クーポンを検証するための情報を提供することもできますが、クーポンを作成する機能は秘密鍵の所有者 (= あなた) に委ねられます。

xml にシリアル化するクーポン クラスを作成し、xml 文字列を暗号化します。検証は、文字列を復号化し、それが有効な xml であるかどうかを確認することです (事前に確認せずにオブジェクトを逆シリアル化しないことをお勧めします)。

于 2008-10-13T12:34:40.080 に答える
2

顧客コードとクーポンの有効期限を使用します。検証に関しては、有効なクーポンをデータベースに保存して、それを検証するだけです。クーポン テーブルを 1 日 1 回スキャンして、期限切れのコードを消去できます。

于 2008-10-13T12:30:55.050 に答える
2

あなたのセールスマン(または女性)はどれくらい賢いですか?値を base 64 でエンコードできますか?

base64 でエンコードおよびデコードする方法については、こちらをご覧ください。

http://arcanecode.wordpress.com/2007/03/21/encoding-strings-to-base64-in-c/

それ以外は、あなたとクライアント アプリケーションが知っているキーで値を暗号化します。

于 2008-10-13T12:33:32.580 に答える
1

Steve Gibson は彼の Web サイトでワンタイム パスワードについて語っていますが、それを使用してワンタイム クーポン コードを作成できない理由はありません: http://grc.com/ppp

于 2009-04-20T18:37:57.923 に答える
1

これは、これまでの回答を要約するだけです。このようなクーポン コードを生成するには、主に 2 つの異なる方法があります。

  1. 一元化されたソリューション: 各クーポンに関する情報はデータベースに保存されます。クーポン コードは、ランダムに生成された短いものにすることができます。これは、クーポンの値、顧客 ID、担当者 ID など、必要なすべての情報を含むデータベース内のレコードへの単なる参照です。このようなコードを確認するには、サーバーへのオンライン アクセスが必要です。

  2. 分散型ソリューション: クーポンは、サーバーにアクセスすることなく、オフライン モードで確認できるスタンドアロンの情報です。その結果、クーポン コードには情報の一部 (またはすべて) を含める必要があります。最も安全な方法は、非対称暗号化またはメッセージ認証コードを使用して、秘密鍵の所有者 (あなた) 以外の誰もクーポンを生成できないようにすることです。

于 2008-10-13T13:07:30.780 に答える
1

コードをデータベースに保存したくないという質問の言い回しから推測しています(保存した場合は、各コードをデータベースに対して単純に検証できます)

したがって、クーポンの内容に関するすべての関連情報を取得し、それを秘密のソルトと一緒にハッシュして、改ざんを防ぐことができます。

したがって、200 ドル相当のユーザー 23 用のクーポンが必要な場合、"23_200" のような文字列を作成し、"BillTheLizard" のシークレット ソルトを使用して MD5 ハッシュを計算し、2671519131e974ee6fc746151e98f4a8 を取得します。したがって、顧客に提供する完全なコードは次のようになります。 200_23_2671519131e974ee6fc746151e98f4a8

コードを受け取ったら、コードを分解し、md5("200_23"+secret) = 2671519131e974ee6fc746151e98f4a8 を確認して値を確認します。

編集: 32 文字のハッシュが長すぎる場合は、いつでも切り捨てることができます。たとえば、8 文字に切り詰めても、4294967296 の異なるハッシュ値が得られます。

于 2008-10-13T12:37:45.380 に答える