6

データベースオブジェクトのURLを生成しようとしています。URLに主キーを使用すべきではないことを読みました。この特定のモデルでは、スタブは適切なオプションではありません。そのリンクのアドバイスに基づいて、Pythonインタープリターでzlib.crc32()を試してみたところ、値がURLに不要な負の数を返すことがよくあることがわかりました。URLを生成するために使用する必要があるより良いハッシュはありますか?

更新:私は、以下のDavidによって提案されたビット単位のXORマスキング方法を使用することになり、それは素晴らしく機能します。ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

14

まず、「URLで主キーを使用しない」は非常に弱いガイドラインにすぎません。インクリメンタル整数IDを使用していて、それらの数値を明らかにしたくない場合は、それらを少しわかりにくくすることができます。たとえば、:とを使用できます。masked_id = entity.id ^ 0xABCDEFABunmasked_id = masked_id ^ 0xABCDEFAB

第二に、あなたがリンクした記事は非常に疑わしいです。私はそれを信用しません。まず、CRC32は一方向のハッシュ関数です。CRC32ハッシュを取得して、そのハッシュの作成に使用された文字列を取得することは(一般的に)不可能です。Customerあなたは彼が彼らのCRC32を与えられたものを調べる方法をあなたに示さないことに気付くでしょうpk。第二に、記事のコードは意味がありません。このzlib.crc32関数はバイト文字列を想定していますCustomer.idが、整数になります。

3番目に、URLにスラッグを使用する場合は注意してください。スラッグが変更されると、URLも変更されます。これは問題ないかもしれませんが、考慮する必要があります。

于 2012-05-12T00:49:56.497 に答える