-4

簡単に言えば、 sha512の最初の40文字をエコーし​​たいだけです

$salt = "fRY^YXCH%^ER^*&^";
$profiletoken = hash("sha512", $salt . $user . $id . $value);
echo $profiletoken;

これにより、次のような出力が得られます

09821f0ae9bdee372b344b0921582f2e7a3a0587a3b55bb247f200381e92ffd41480e8619b3d575214a7a25c3a9d0f618c6733bed6830ee7b66136b85f8d7568

でも最初の40文字だけ欲しい

09821f0ae9bdee372b344b0921582f2e7a3a0587

ありがとう、私が自分自身を明確にしたことを願っています

4

3 に答える 3

3
$profiletoken = hash("sha512", $salt . $user . $id . $value);
$shortToken = substr($profiletoken, 0, 40);

しかし、私の質問は、なぜ 40 文字に短縮するのですか? そのようなことは、128 文字を生成する SHA512 を使用するポイントを無効にします。SHA512 の場合、CHAR(128) としてデータベースに格納できます。

$profiletoken = hash("sha1", $salt . $user . $id . $value);
echo $profiletoken; // 40 characters long

編集 1: SHA1 は使用しないでください。安全ではありません。

編集 2:ハッシュの切り捨てのトピックについてもっと読みたい人のために、私は暗号交換でそれについて尋ねました。それ以来、それは非常に人気のある質問になりました:

SHA512 ハッシュを最初の 160 ビットに切り詰めることは、SHA1 を使用するのと同じくらい安全ですか?

于 2013-07-10T15:05:17.253 に答える
2

substr だけで十分です。

echo substr($profiletoken, 0 ,40);

これを使用してゲームの状態を追跡するための一意のトークンを生成するだけの場合は、uniqid の使用を検討するか、状態をファイルシステム tempnam に保存する場合

于 2013-07-10T15:04:41.400 に答える