ユーザーは、単純な登録解除リンクが記載されたメールを送信するスレッドに登録できます。このリンクには、暗号化されたサブスクライブ ID と、このプロセスによる検証ユーザー ID が含まれています。
// generate iv and create encrypted data
$iv = openssl_random_pseudo_bytes(16);
$encrypted = openssl_encrypt($data, 'AES-128-CBC', ENCRYPTION_KEY,0,$iv);
// send the iv along with the encrypted text
$ciphertext = $iv . $encrypted;
// generate a hash which can verify the data has not changed
$hash = hash_hmac('sha1', $ciphertext, ENCRYPTION_KEY)
// encode the data for email link
encoded = urlencode(base_64_encode($hash.$ciphertext))
これにより、次のような文字列が生成されます。
www.site.com?id=YzU4MzAzMjljZWUyYmNmY2JmNjE5MGE0YzVhNDUzZjI0YmJmZWI3YoyqdFj6dxA/OVJOw2UN7HErYVV5dmhUVEJzVHBsUGd3aDNHbjVYbmFMa0dhUFczSmpXWnFBN0FyVGxkVml3S041VlhsSXd6TitJYld5QmdhWEFkL3hYSDFiRWdzN0wvNjFXYURiYlNreXpLQ1ZqWnhHMmdCSlZGaUVxU3ZGY3I3RW9GZkJYN3l4Vkp3YmJicg
サーバー側では、データとハッシュを検証し、データに含まれるユーザー ID に対して subscribeid が有効であることを確認してから、subscribe レコードに期限切れのマークを付けます。
一時的なログイン (有効期限付きのログイン) 用にこの暗号化を開発しましたが、単純な登録解除リンクに対して 250 文字の文字列はやり過ぎですか? 主な問題は、URL とプレーン テキストのメールでは見苦しいことのようです。また、プレーン テキストの電子メール クライアントでリンクが壊れるリスクもあります。
これがハッキングされた場合、最も危険にさらされるのは、サブスクライブ レコードが期限切れとしてマークされることです。オーバーキル(またはその他)について心配する必要があります。より簡単で安全な方法はありますか? 私は暗号化の初心者です。基本的な質問は、どれくらいで十分ですか?