0

システムに UUID を保存するために QR コード バーコードを使用していますが、生成されたバーコードが自分のものであり、他人のものではないことを確認する必要があります。また、QR コードが下位バージョンの範囲に留まり、スキャンしやすいままになるように、エンコードされたデータを短く保つ必要もあります。

私のアプローチは、UUID の raw 値の数値 (128 ビット値) と 16 ビットのチェックサムを取得し、そのデータを Base64 でエンコードしてから QR コードに変換することです。これまでのところ、これは完全に機能します。

チェックサムを生成するには、UUID の文字列バージョンを取得し、それを長い秘密の文字列と結合し、奇数バイトを XOR して SHA-1 ハッシュを生成します。しかし、このハッシュは長すぎるので、すべての古いバイトを XOR してチェックサムの半分を生成し、同様に偶数バイトを使用して残りの半分を生成します。

私が心配しているのは、SHA-1 システムを不必要に XOR ダウンして侵害したことです。結果内のどこかから、操作されていない 2 バイトだけを取得する方がよいでしょうか? 16 ビットのチェックサムが 160 ビットのチェックサムほど安全ではないことは承知していますが、それはバーコードを使いやすくするために支払わなければならない代償です。私が本当に見つけたくないのは、UUIDが平文で送信されるため、簡単にクラックできるチェックサムを提供したことです。

チェックサムを生成するより良い方法があれば、それも質問に対する適切な答えになります。いつもお時間をいただき、またはこれを読んでいただき、ありがとうございます。回答を投稿していただければ、さらに感謝いたします。

4

1 に答える 1

0

XOR を行う理由はありません。最初の 2 バイトを取得するだけで、(in)secure になります。

コードのバージョンをできるだけ小さく保つために、144 ビット値を 10 進文字列に変換してエンコードすることをお勧めします。QR コードにはさまざまな文字セットがあり、数値を効率的にエンコードします。Base64 は QR コードで 8 ビット値としてのみエンコードできるため、そこに 30% を追加します。

于 2012-08-04T06:55:17.400 に答える