10

これがどのようなハッシュ/暗号化であるかを SQL データベースで調べようとしています。パスワードのリセットを行うアプリを作成したいのですが、この値がどのように生成されているかを一生見つけることができません。

ここに複数の例があります

{enc:1}gdyb21LQTcIANtvYMT7QVQ==
{enc:1}ZEImYhrd/Ot/LcewJCFdMw==
{enc:1}+IOSBzegAx7nSytO1J3GEw==
{enc:1}6ULa1IFMxavY7SE66K3UDg==
{enc:1}UEFeGim2M8d0Iee7ejFRUw==
{enc:1}RjqL5rXOBpqJAKPjYkwLtw==
{enc:1}V/PEslecyYxFki03H4ctAQ==
{enc:1}VDEm9QmD+L7tsqcPz/S9XQ==
{enc:1}YkQuEPpL6dRfDLwKMEVMMg==
{enc:1}86rG96EP7T3tx9e8C7513g==
{enc:1}xvSwvsmkgwtXwVISvg7mJQ==
{enc:1}KjCF0RD4tcUGEP4Bpafw5A==
{enc:1}z9pGrdm4QAoomrFCJCXQIQ==
{enc:1}yhLv0HeW90FENKJjV9Nb+g==
{enc:1}EtYMl5FOW+zdpVvWsIj3Rw==
4

1 に答える 1

14

分解してみましょう:

{enc:1}gdyb21LQTcIANtvYMT7QVQ==

パーツは何らかの形でバージョン管理され{enc:1}ている可能性があります。これはかなり一般的であるため、時間の経過とともに使用するハッシュ/暗号化アルゴリズムをアップグレードできます。各値は、ハッシュを生成するために使用されるアルゴリズムを識別します。実装が別のアプローチを使用することを決定した場合、最初のバージョンを使用してパスワードを検証することを認識しますが、新しい形式のハッシュとともに、{enc:1}を withまたは何でも置き換えることができます。 {enc:2}.

残りは base64 で、== で終わる 24 文字です。これは、元の値が 16 バイトであることを意味します。

したがって、これは何らかの種類の 16 バイト (128 ビット) のハッシュであり、バージョン管理プレフィックスが付いています。私たちが知ることができるのはこれだけです...それは任意の128 ビット ハッシュ、またはおそらく 128 ビットのより長いハッシュの可能性があります (ただし、なぜその時点でデータが破棄されたのか疑問に思う必要があります)。

パスワードを使用して独自のユーザーを作成できる場合は、さらにテストを実行できます。たとえば、同じパスワードを持つ 2 人のユーザーは、最終的に同じハッシュになりますか? そうでない場合、単一のユーザーのパスワード X からパスワード Y に変更してからパスワード X に戻すと同じハッシュになりますか? (ユーザー名をソルトとして使用できますが、値に明らかなソルトはありません。)

于 2012-04-25T13:26:50.380 に答える