SHA512-CRYPT を MySQL 内に実装することは不可能のようです。Dovecot に関する限り、最初から暗号化を使用することを提案する理由が理解できないことは認めます。OPが提案したように強力なハッシュを使用すると、少なくとも同様に機能し、より安全になります。
私はソルトを追加したパスワードを好むので、Dovecot のSSHA512を使用する方法は次のとおりです。
INSERT INTO `virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
(NULL, '1', (SELECT REPLACE(TO_BASE64(CONCAT(UNHEX(SHA2(CONCAT('YourPasswordHere', v.salt), 512)), v.salt)), '\n', '') AS salted FROM (SELECT SHA2(RAND(), 512) AS salt) v), 'user@example.com');
または、パスワードを更新するには:
UPDATE virtual_users
SET `password` = (
SELECT REPLACE(TO_BASE64(CONCAT(UNHEX(SHA2(CONCAT('YourPasswordHere', v.salt), 512)), v.salt)), '\n', '') AS salted
FROM (
SELECT SHA2(RAND(), 512) AS salt
) v
)
WHERE email = 'user@example.com';
これらのクエリ:
- ランダムな (かなり長い) ソルトを生成する
- パスワードにソルトを追加する
- #2 の SHA512 ハッシュを取得する
- ハッシュをバイナリに変換する
- #4に塩を追加
- 全体をBase64に変換
TO_BASE64()
MySQL の関数によって追加された不要な改行を削除します
password
結果は 256 バイトの長さの文字列になるため、フィールドを VARCHAR(256)に更新する必要がある場合があります。
暗号化されたパスワードを手動で生成するために使用することを提案するチュートリアルがいくつかありますが、doveadm
これはうまく機能しますが、少し面倒です. 興味のある方は、次のように呼び出すことができます。
doveadm pw -s SHA512-CRYPT -p "YourPasswordHere"
さらに便利なのは、生成されたパスワードを同じユーティリティで検証する機能です。
doveadm auth test user@example.com YourPasswordHere