من می کوشم نوعی سیستم تأیید ایمیل را با سرور node.js بدون دولت پیاده سازی کنم.

استراتژی

  1. کاربر ایمیل خود را به سرور می فرستد
  2. سرور کد 4 رقمی را بر اساس آدرس ایمیل و ارسال آن از طریق ایمیل به کاربر.
  3. کاربر کد دریافت شده را از طریق ایمیل + آدرس ایمیل به سرور ارسال می کند
  4. سرور دوباره کد 4 رقمی را بر اساس ایمیل دوباره تولید می کند و آن را با کد ارسال شده توسط کاربر.

اجرای من برای تولید کد 4 رقمی

  1. ایجاد یک هضم HEX با استفاده از عملکرد هش HMAC SHA-256
  2. 3 شخصیت اول هضم را بگیرید
  3. آنها را به یک عدد صحیح تبدیل کنید.
  4. اگر طول <4 ، یک یا چند برابر شود 0 در انتهای
 const crypto = نیاز ("رمزنگاری")

const get4DigitsCode = (پیام) =>
  const hash = crypto
    .createHmac ('sha256' ، Buffer.from (SECRET_KEY ، 'هگزا'))
    به روز رسانی (پیام)
    . بزرگترین ("هگز")

  const first3HexCharakter = hash.slice (0 ، 3)

  const int = parseInt (first3HexCharactions، 16)

  اجازه دهید کد = int.toString ()
  کد =
    آرایه (4 - کد. طول)
      پر کنید (0)
      .join ("") + کد

  کد بازگشت
}

پس از تولید کد برای 8293 آدرس ایمیل ، متوجه شدم که 4758 نسخه تکراری دارم. آیا داشتن این مقدار تکراری برای یک کد به این صورت طبیعی است؟ آیا استراتژی و اجرای من امن است (توانایی حدس زدن کد)؟