たとえば、多くのソフトウェアが使用するライセンスキーなどです。シーケンスに暗号で署名することを考えていたので、IDに4バイト、署名に8バイトを指定することもできましたが、適切なアルゴリズムが見つかりません。
私が必要としているのは、攻撃者が簡単に生成できないものですが、約20ASCIIバイト未満で保存されています。また、独自性にも自信を持つ必要があります。これは完全に安全である必要はなく、偶発的な攻撃に対してのみ安全です。
注:これは、AppEngineのJavaで行っています。
HMACのように聞こえます。ただし、おそらく手動で一意性を確保する必要があります。
IDを含む値を文字列に計算し、秘密鍵と最大長を持つバイトベースのHDMACを使用します。暗号化する値に一意の部分があることを確認してください。これは、サーバー時間またはその他のIDである可能性があります。長さは、20文字の要件内に収まるかどうかをテストする必要があります。
暗号化は可逆的であるため、出力は一意の入力に対して一意であることが保証されます。毎回同じキーを使用して、0、1、2、3、4、5などを暗号化するだけです。128ビット出力の場合、ECBモードでAESと128ビット数を使用します。他のモードでも同じIV/ノンスが必要になります。64ビット番号の場合はDESを使用します。他のサイズ番号の場合は、ヘイスティプディング暗号を使用するか、必要なサイズに合わせて独自の単純なFeistel暗号をロールします。
ECBは最も安全なモードではありませんが、ここで非常に高いレベルのセキュリティを探しているという印象はありません。