পিএইচপি: একটি এলোমেলো, অনন্য, অক্ষরযুক্ত স্ট্রিং কীভাবে উত্পন্ন করা যায়?


380

যাচাই লিঙ্কে ব্যবহারের জন্য নম্বর এবং অক্ষর ব্যবহার করে কোনও এলোমেলো, অনন্য স্ট্রিং তৈরি করা কীভাবে সম্ভব হবে? যেমন আপনি যখন কোনও ওয়েবসাইটে অ্যাকাউন্ট তৈরি করেন এবং এটি আপনাকে একটি লিঙ্ক সহ ইমেল পাঠায় এবং আপনার অ্যাকাউন্ট যাচাই করতে আপনাকে সেই লিঙ্কটি ক্লিক করতে হবে ... হ্যাঁ ... এর মধ্যে একটি।

আমি পিএইচপি ব্যবহার করে তাদের মধ্যে কীভাবে তৈরি করতে পারি?

আপডেট: সবেমাত্র মনে আছে uniqid()। এটি একটি পিএইচপি ফাংশন যা মাইক্রোসেকেন্ডে বর্তমান সময়ের উপর ভিত্তি করে একটি অনন্য সনাক্তকারী তৈরি করে। আমি মনে করি আমি এটি ব্যবহার করব।


আপনার যা দরকার তা হ'ল স্ট্রিং এবং সমানভাবে বিতরণ করা এলোমেলো সংখ্যা।
আর্টেলিয়াস

10
আরে অ্যান্ড্রু, আপনার Scottসঠিক উত্তর হিসাবে চয়ন করা উচিত । স্কট ওপেনএসএসএল এর ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত স্যুডো-র্যান্ডম নম্বর জেনারেটর (সিএসপিআরএনজি) ব্যবহার করছে যা আপনার প্ল্যাটফর্মের উপর ভিত্তি করে এন্ট্রপির সবচেয়ে সুরক্ষিত উত্সটি চয়ন করবে।
রোক

3
2015 এর পরে যে কেউ এটি পড়ছেন, দয়া করে এখানে দেখুন: paragonie.com/blog/2015/07/… সর্বাধিক শীর্ষ উত্তর কম-বেশি ত্রুটিযুক্ত ...
রাগক

ওপেনএসএসএল এবং uniqidনিরাপত্তাহীন। Random::alphanumericString($length)বা এর মতো কিছু ব্যবহার করুন Random::alphanumericHumanString($length)
কাও

উত্তর:


305

সুরক্ষা বিজ্ঞপ্তি : এই সমাধানটি এমন পরিস্থিতিতে ব্যবহার করা উচিত নয় যেখানে আপনার এলোমেলোতার মান কোনও অ্যাপ্লিকেশনটির সুরক্ষাকে প্রভাবিত করতে পারে। বিশেষত, rand()এবং uniqid()ক্রিপ্টোগ্রাফিকভাবে নিরাপদ র্যান্ডম সংখ্যা জেনারেটর নয় । সুরক্ষিত বিকল্পের জন্য স্কটের উত্তর দেখুন ।

আপনার যদি প্রয়োজন হয় না সময়ের সাথে একেবারে অনন্য হতে:

md5(uniqid(rand(), true))

অন্যথায় (আপনি ইতিমধ্যে আপনার ব্যবহারকারীর জন্য একটি অনন্য লগইন নির্ধারণ করেছেন):

md5(uniqid($your_user_login, true))

90
উভয় পদ্ধতিই স্বতন্ত্রতার গ্যারান্টি দেয় না - এমডি 5 ফাংশনের ইনপুটটির দৈর্ঘ্য তার আউটপুটের দৈর্ঘ্যের চেয়ে বেশি এবং এন.ইউইকিপিডিয়া / উইকি / পিগনহোল_প্রিন্টিয়াল অনুসারে সংঘর্ষের নিশ্চয়তা রয়েছে। অন্যদিকে, "অনন্য" আইডি অর্জনের জন্য হ্যাশগুলির উপর নির্ভরশীল বেশি জনসংখ্যার কমপক্ষে একটি সংঘর্ষ হওয়ার সম্ভাবনা তত বেশি ( এন.ইউইউইকিপিডিয়া / উইকি / বার্থডে_প্রব্লেম দেখুন )। বেশিরভাগ সমাধানের জন্য সম্ভাবনা খুব ছোট হতে পারে তবে এটি এখনও বিদ্যমান।
দরিউস ওয়ালকজাক

12
এটি এলোমেলো মান উত্পন্ন করার নিরাপদ পদ্ধতি নয়। স্কট এর উত্তর দেখুন।
রোক

4
তুলনামূলকভাবে শীঘ্রই মেয়াদ শেষ হওয়া ইমেল নিশ্চিতকরণগুলির জন্য, আমি মনে করি যে একজন ব্যক্তি একদিন অন্য কারও ইমেলকে নিশ্চিত করতে পারে যে এই ক্ষুদ্র সম্ভাবনা একটি উপেক্ষিত ঝুঁকি। তবে আপনি সর্বদা এটি ডিবিতে তৈরি করার পরে টোকেনটি ইতিমধ্যে উপস্থিত আছে কিনা তা পরীক্ষা করে দেখতে পারেন এবং যদি কেস হয় তবে এটি একটি নতুন চয়ন করুন। তবে কোডের স্নিপেটটি লেখার সময় আপনি ব্যয় করেছেন সম্ভবত এটি কখনও চালিত হবে না।
অ্যান্ড্রু

মনে রাখবেন যে এমডি 5 হেক্সাডেসিমাল মানগুলি প্রদান করে, অর্থাত অক্ষর সেটটি [0-9] এবং [আফগান] এর মধ্যে সীমাবদ্ধ।
থিজ রিজবাইক 15'15

1
এমডি 5 এর সংঘর্ষ হতে পারে, আপনি স্রেফ এককীড সুবিধা নষ্ট করেছেন
ব্যবহারকারী 151496

507

আমি ঠিক কীভাবে এই একই সমস্যাটি সমাধান করবেন সেদিকে নজর দিচ্ছিলাম, তবে আমি আমার ফাংশনটিও একটি টোকেন তৈরি করতে চাই যা পাসওয়ার্ড পুনরুদ্ধারের জন্যও ব্যবহার করা যেতে পারে। এর অর্থ হ'ল টোকেনটির অনুমান করার ক্ষমতা সীমাবদ্ধ করতে হবে। কারণ uniqidসময়ের উপর ভিত্তি করে, এবং পিএইচপি.net অনুযায়ী "রিটার্নের মান মাইক্রোটাইম () থেকে কিছুটা আলাদা", uniqidমানদণ্ডটি পূরণ করে না। পিএইচপি openssl_random_pseudo_bytes()পরিবর্তে ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত টোকেন তৈরির জন্য ব্যবহারের পরামর্শ দেয় ।

একটি দ্রুত, সংক্ষিপ্ত এবং মূল উত্তরটি হ'ল:

bin2hex(openssl_random_pseudo_bytes($bytes))

যা দৈর্ঘ্য = of বাইট * ২ এর বর্ণমালার অক্ষরের একটি এলোমেলো স্ট্রিং উত্পন্ন করবে দুর্ভাগ্যক্রমে এটির কেবলমাত্র বর্ণমালা রয়েছে [a-f][0-9]তবে এটি কার্যকর।


নীচে আমি যে শক্তিশালী ফাংশনটি তৈরি করতে পারি তা মানদণ্ডগুলিকে সন্তুষ্ট করে (এটি এরিকের উত্তরের একটি কার্যকর সংস্করণ)।

function crypto_rand_secure($min, $max)
{
    $range = $max - $min;
    if ($range < 1) return $min; // not so random...
    $log = ceil(log($range, 2));
    $bytes = (int) ($log / 8) + 1; // length in bytes
    $bits = (int) $log + 1; // length in bits
    $filter = (int) (1 << $bits) - 1; // set all lower bits to 1
    do {
        $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
        $rnd = $rnd & $filter; // discard irrelevant bits
    } while ($rnd > $range);
    return $min + $rnd;
}

function getToken($length)
{
    $token = "";
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
    $codeAlphabet.= "0123456789";
    $max = strlen($codeAlphabet); // edited

    for ($i=0; $i < $length; $i++) {
        $token .= $codeAlphabet[crypto_rand_secure(0, $max-1)];
    }

    return $token;
}

crypto_rand_secure($min, $max)rand()বা প্রতিস্থাপনের ড্রপ হিসাবে কাজ করে mt_rand। এটি ওপেনএসএল_রাডম_পসিউডো_বিটস ব্যবহার করে $ মিনিট এবং $ সর্বাধিকের মধ্যে একটি এলোমেলো সংখ্যা তৈরি করতে সহায়তা করে।

getToken($length)টোকেনের মধ্যে ব্যবহারের জন্য একটি বর্ণমালা তৈরি করে এবং তারপরে দৈর্ঘ্যের একটি স্ট্রিং তৈরি করে $length

সম্পাদনা: উত্স উদ্ধৃত করার জন্য আমি অবহেলা করেছি - http://us1.php.net/manual/en/function.openssl-random-pseudo-bytes.php#104322

সম্পাদনা (পিএইচপি 7): পিএইচপি 7 প্রকাশের সাথে, স্ট্যান্ডার্ড লাইব্রেরিতে এখন দুটি নতুন ফাংশন রয়েছে যা উপরের ক্রিপ্টো_র্যান্ড_সিকিউর ফাংশনটিকে প্রতিস্থাপন / উন্নত / সরল করতে পারে। random_bytes($length)এবংrandom_int($min, $max)

http://php.net/manual/en/function.random-bytes.php

http://php.net/manual/en/function.random-int.php

উদাহরণ:

function getToken($length){
    $token = "";
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
    $codeAlphabet.= "0123456789";
    $max = strlen($codeAlphabet);

    for ($i=0; $i < $length; $i++) {
        $token .= $codeAlphabet[random_int(0, $max-1)];
    }

    return $token;
}

2
একমত। প্লেইনটেক্সট পাসওয়ার্ড স্টোরেজ ভয়াবহ! (আমি ব্লোফিশ ব্যবহার করি)) তবে টোকেন উত্পন্ন হওয়ার পরে এটি টোকেনধারকে পাসওয়ার্ডটি পুনরায় সেট করার অনুমতি দেয়, সুতরাং টোকেনটি বৈধ হওয়ার সাথে সাথে পাসওয়ার্ডের সমতুল্য হয় (এবং এরূপ হিসাবে বিবেচিত হয়)।
স্কট

23
আরে, আমি আপনার চমৎকার কোডটি সুবিধাজনক কোহানা পাঠ্যের সাথে মিশ্রিত করেছি: এলোমেলো () পদ্ধতির কার্যকারিতা এবং এই গিস্টটি
রাভেরেন

9
পারফেক্ট! আমি দৈর্ঘ্য হিসাবে 10 অক্ষর দিয়ে এটি পরীক্ষা করেছি। 100000 টোকেন এবং এখনও কোনও নকল নেই!
শার্পলেস 512

5
আমি এই প্রক্রিয়াটি ব্যবহার করেছি এবং এটি খুব ধীর পেয়েছি। 36 এর দৈর্ঘ্যের সাথে এটি ডেভ সার্ভারে শেষ হয়ে গেছে। 24 দৈর্ঘ্যের সাথে এটি এখনও 30 সেকেন্ড সময় নেয়। আমি কী ভুল করেছিলাম তা নিশ্চিত নয় তবে এটি আমার পক্ষে খুব ধীর ছিল এবং আমি অন্য সমাধানের পক্ষে বেছে নিয়েছি।
শেন

5
আপনি বৃহত্তর বর্ণমালা দিয়ে সংক্ষিপ্ত স্ট্রিংয়ের base64_encodeপরিবর্তে ব্যবহার করতে পারেন bin2hex
এরজিয়াং

91

সর্বাধিক আপ-ভোটযুক্ত সমাধানটির উদ্দেশ্য-ভিত্তিক সংস্করণ

আমি স্কটের উত্তরের ভিত্তিতে একটি অবজেক্ট-ভিত্তিক সমাধান তৈরি করেছি :

<?php

namespace Utils;

/**
 * Class RandomStringGenerator
 * @package Utils
 *
 * Solution taken from here:
 * http://stackoverflow.com/a/13733588/1056679
 */
class RandomStringGenerator
{
    /** @var string */
    protected $alphabet;

    /** @var int */
    protected $alphabetLength;


    /**
     * @param string $alphabet
     */
    public function __construct($alphabet = '')
    {
        if ('' !== $alphabet) {
            $this->setAlphabet($alphabet);
        } else {
            $this->setAlphabet(
                  implode(range('a', 'z'))
                . implode(range('A', 'Z'))
                . implode(range(0, 9))
            );
        }
    }

    /**
     * @param string $alphabet
     */
    public function setAlphabet($alphabet)
    {
        $this->alphabet = $alphabet;
        $this->alphabetLength = strlen($alphabet);
    }

    /**
     * @param int $length
     * @return string
     */
    public function generate($length)
    {
        $token = '';

        for ($i = 0; $i < $length; $i++) {
            $randomKey = $this->getRandomInteger(0, $this->alphabetLength);
            $token .= $this->alphabet[$randomKey];
        }

        return $token;
    }

    /**
     * @param int $min
     * @param int $max
     * @return int
     */
    protected function getRandomInteger($min, $max)
    {
        $range = ($max - $min);

        if ($range < 0) {
            // Not so random...
            return $min;
        }

        $log = log($range, 2);

        // Length in bytes.
        $bytes = (int) ($log / 8) + 1;

        // Length in bits.
        $bits = (int) $log + 1;

        // Set all lower bits to 1.
        $filter = (int) (1 << $bits) - 1;

        do {
            $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));

            // Discard irrelevant bits.
            $rnd = $rnd & $filter;

        } while ($rnd >= $range);

        return ($min + $rnd);
    }
}

ব্যবহার

<?php

use Utils\RandomStringGenerator;

// Create new instance of generator class.
$generator = new RandomStringGenerator;

// Set token length.
$tokenLength = 32;

// Call method to generate random string.
$token = $generator->generate($tokenLength);

কাস্টম বর্ণমালা

প্রয়োজনে কাস্টম বর্ণমালা ব্যবহার করতে পারেন। কেবল কনস্ট্রাক্টর বা সেটারকে সমর্থিত অক্ষরের সাথে একটি স্ট্রিং দিন:

<?php

$customAlphabet = '0123456789ABCDEF';

// Set initial alphabet.
$generator = new RandomStringGenerator($customAlphabet);

// Change alphabet whenever needed.
$generator->setAlphabet($customAlphabet);

এখানে আউটপুট নমুনা

SRniGU2sRQb2K1ylXKnWwZr4HrtdRgrM
q1sRUjNq1K9rG905aneFzyD5IcqD4dlC
I0euIWffrURLKCCJZ5PQFcNUCto6cQfD
AKwPJMEM5ytgJyJyGqoD5FQwxv82YvMr
duoRF6gAawNOEQRICnOUNYmStWmOpEgS
sdHUkEn4565AJoTtkc8EqJ6cC4MLEHUx
eVywMdYXczuZmHaJ50nIVQjOidEVkVna
baJGt7cdLDbIxMctLsEBWgAw5BByP5V0
iqT0B2obq3oerbeXkDVLjZrrLheW4d8f
OUQYCny6tj2TYDlTuu1KsnUyaLkeObwa

আমি আশা করি এটি কাউকে সাহায্য করবে। চিয়ার্স!


আমি দুঃখিত তবে আমি এই জিনিসটি কীভাবে চালাব? আমি করেছি $obj = new RandomStringGenerator;কিন্তু কোন পদ্ধতিটি কল করা উচিত? ধন্যবাদ.
সাক 552

@ sg552, generateউপরের উদাহরণ হিসাবে আপনার পদ্ধতি কল করা উচিত । ফলাফলের স্ট্রিংয়ের দৈর্ঘ্য নির্দিষ্ট করতে এটিতে একটি পূর্ণসংখ্যা পাস করুন।
স্লাভা ফমিন দ্বিতীয়

ধন্যবাদ এটি আমার পক্ষে কাজ করে তবে Custom Alphabetতা করেনি। আমি প্রতিধ্বনিত হয়ে খালি আউটপুট পেয়েছি। যাইহোক আমি ২ য় উদাহরণের ব্যবহার কী তাও নিশ্চিত নই Custom Alphabetতাই আমি মনে করি আমি কেবল প্রথম উদাহরণটির সাথেই রয়েছি । ধন্যবাদ।
sg552

1
দুর্দান্ত, তবে বেশিরভাগ পরিস্থিতিতে বেশিরভাগ পরিস্থিতিতেই ওভারকিল, যদি না আপনার প্রকল্পটি এলোমেলোভাবে উত্পন্ন কোডগুলিতে বেশি নির্ভর করে
ডিসপেসেজে

1
হ্যাঁ দুর্দান্ত তবে অতিরিক্ত দক্ষতা, বিশেষত বিবেচনা করে এখন পিএইচপি ৫.7
এন্ড্রু

39

আমি দেরি করে ফেলেছি তবে স্কট এর উত্তরের প্রদত্ত ফাংশনগুলির উপর ভিত্তি করে কিছু ভাল গবেষণা ডেটা নিয়ে এখানে এসেছি । সুতরাং আমি এই 5 দিনের দীর্ঘ স্বয়ংক্রিয় পরীক্ষার জন্য একটি ডিজিটাল মহাসাগর বিন্দু সেট আপ করেছি এবং উত্পন্ন অনন্য স্ট্রিংগুলি মাইএসকিউএল ডাটাবেসে সংরক্ষণ করেছি stored

এই পরীক্ষার সময়কালে, আমি 5 টি পৃথক দৈর্ঘ্য (5, 10, 15, 20, 50) এবং +/- 0.5 মিলিয়ন রেকর্ড প্রতিটি দৈর্ঘ্যের জন্য sertedোকানো হয়েছিল। আমার পরীক্ষার সময়, ৫.৫ মিলিয়নের মধ্যে কেবল দৈর্ঘ্য 5 / + 3K নকল হয় এবং অবশিষ্ট দৈর্ঘ্য কোনও সদৃশ তৈরি করে না। সুতরাং আমরা বলতে পারি যে আমরা যদি স্কটের ফাংশনগুলির সাথে 15 বা তার বেশি দৈর্ঘ্য ব্যবহার করি, তবে আমরা অত্যন্ত নির্ভরযোগ্য অনন্য স্ট্রিং তৈরি করতে পারি। এখানে আমার গবেষণার ডেটা দেখানো সারণীটি দেওয়া হচ্ছে:

এখানে চিত্র বর্ণনা লিখুন

আপডেট: আমি এই ফাংশনগুলি ব্যবহার করে একটি সাধারণ হেরোকু অ্যাপ্লিকেশন তৈরি করেছি যা JSON প্রতিক্রিয়া হিসাবে টোকেনটি দেয়। অ্যাপ্লিকেশনটি https://uniquestrings.herokuapp.com/api/token?length=15 এ অ্যাক্সেস করা যায়

আশা করি এটা কাজে লাগবে.


33

আপনি ইউআইডি (সর্বজনীন ইউনিক আইডেন্টিফায়ার) ব্যবহার করতে পারেন, এটি ব্যবহারকারীর প্রমাণীকরণের স্ট্রিং থেকে শুরু করে অর্থ প্রদানের লেনদেন আইডি পর্যন্ত কোনও উদ্দেশ্যেই ব্যবহার করা যেতে পারে।

একটি ইউআইডি একটি 16-অক্টেট (128-বিট) নম্বর। এর ক্যানোনিকাল আকারে, একটি ইউআইডি 32 টি হেক্সাডেসিমাল অঙ্ক দ্বারা প্রতিনিধিত্ব করা হয়, হাইফেন দ্বারা পৃথক পাঁচটি গ্রুপে প্রদর্শিত হবে, মোট 36 টি অক্ষরের (32 বর্ণানুক্রমিক অক্ষর এবং চারটি হাইফেন) আকারে 8-4-4-4-12 ফর্মে।

function generate_uuid() {
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
        mt_rand( 0, 0xffff ),
        mt_rand( 0, 0x0C2f ) | 0x4000,
        mt_rand( 0, 0x3fff ) | 0x8000,
        mt_rand( 0, 0x2Aff ), mt_rand( 0, 0xffD3 ), mt_rand( 0, 0xff4B )
    );

}

// কল্পনা কল্পনা

$transationID = generate_uuid();

কিছু উদাহরণ আউটপুট যেমন হবে:

E302D66D-87E3-4450-8CB6-17531895BF14
22D288BC-7289-442B-BEEA-286777D559F2
51B4DE29-3B71-4FD2-9E6C-071703E1FF31
3777C8C6-9FF5-4C78-AAA2-08A47F555E81
54B91C72-2CF4-4501-A6E9-02A60DCBAE4C
60F75C7C-1AE3-417B-82C8-14D456542CD7
8DE0168D-01D3-4502-9E59-10D665CEBCB2

আশা করি এটি ভবিষ্যতে কাউকে সহায়তা করবে :)


দুর্দান্ত দেখাচ্ছে, আমার তালিকায় যুক্ত!
মোস্তফা এরদোগান

32

এই ফাংশনটি সংখ্যা এবং অক্ষর ব্যবহার করে একটি এলোমেলো কী তৈরি করবে:

function random_string($length) {
    $key = '';
    $keys = array_merge(range(0, 9), range('a', 'z'));

    for ($i = 0; $i < $length; $i++) {
        $key .= $keys[array_rand($keys)];
    }

    return $key;
}

echo random_string(50);

উদাহরণ আউটপুট:

zsd16xzv3jsytnp87tk7ygv73k8zmr0ekh6ly7mxaeyeh46oe8

6
কিছুক্ষণ পরে আপনি একই সংখ্যায় পাবেন
শার্পলেস 512

1
এটি সম্পূর্ণরূপে এলোমেলো নয় কারণ এটির সাথে একই চ্যাটার কখনও কখনও হবে না।
এরিকপি

16

আমি এই ওয়ান-লাইনারটি ব্যবহার করি:

base64_encode(openssl_random_pseudo_bytes(3 * ($length >> 2)));

যেখানে দৈর্ঘ্যটি পছন্দসই স্ট্রিংয়ের দৈর্ঘ্য (4 দ্বারা বিভাজ্য, অন্যথায় এটি 4 দ্বারা বিভাজ্য নিকটতম সংখ্যায় গোল হয়ে যায়)


6
এটি সবসময় কেবলমাত্র বর্ণমালার অক্ষর ফেরত দেয় না। ==
এটিতে

1
যদি কোনও ইউআরএল base64url_encodeব্যবহার করা হয়, পরিবর্তে ব্যবহার করা যেতে পারে, এখানে দেখুন: php.net/manual/en/function.base64-encode.php
পল

9

11 টি অক্ষরের এলোমেলো সংখ্যা তৈরি করতে বা আপনার প্রয়োজন অনুসারে নম্বর পরিবর্তন করতে নীচের কোডটি ব্যবহার করুন।

$randomNum=substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 11);

অথবা আমরা এলোমেলো সংখ্যা উত্পন্ন করতে কাস্টম ফাংশন ব্যবহার করতে পারি

 function randomNumber($length){
     $numbers = range(0,9);
     shuffle($numbers);
     for($i = 0;$i < $length;$i++)
        $digits .= $numbers[$i];
     return $digits;
 }

 //generate random number
 $randomNum=randomNumber(11);

3
এটি কখনই "আআআআআআআআআআআআআআআআআআআআআআআআআবিআবিবিবি" স্ট্রিং তৈরি করতে পারে না। এটি কেবল বর্ণমালার একটি এলোমেলো অনুক্রমের একটি স্তরকে বাছাই করে। 11 টি অক্ষরের দীর্ঘ স্ট্রিংয়ের কেবল ভি (11,35) = 288 সম্ভাব্য মান রয়েছে। আপনি যদি স্ট্রিংগুলি অনন্য হওয়ার প্রত্যাশা করেন তবে এটি ব্যবহার করবেন না!
kdojeteri

@ পেপিং তারপর করুনsubstr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstvwxyz', 36)), 0, 11);
টিম হলম্যান

7
  1. আপনার প্রিয় এলোমেলো নম্বর জেনারেটর ব্যবহার করে একটি এলোমেলো সংখ্যা তৈরি করুন
  2. আপনার কোড বর্ণমালার অক্ষরের সংখ্যার সাথে মিলে যাওয়া একটি সংখ্যা পেতে এটির গুণ ও ভাগ করুন
  3. আপনার কোড বর্ণমালায় সেই সূচিতে আইটেমটি পান।
  4. আপনার ইচ্ছা অনুযায়ী দৈর্ঘ্য না হওয়া পর্যন্ত 1 থেকে পুনরাবৃত্তি করুন

যেমন (সিউডো কোডে)

int myInt = random(0, numcharacters)
char[] codealphabet = 'ABCDEF12345'
char random = codealphabet[i]
repeat until long enough

তাত্ত্বিকভাবে বলতে গেলে, এই সম্ভাব্যটি একাধিকবার একই স্ট্রিংটি তৈরি করতে পারে না?
frezq

4

আপনার জন্য এখানে চূড়ান্ত অনন্য আইডি জেনারেটর। আমার দ্বারা প্রস্তুতকৃত.

<?php
$d=date ("d");
$m=date ("m");
$y=date ("Y");
$t=time();
$dmt=$d+$m+$y+$t;    
$ran= rand(0,10000000);
$dmtran= $dmt+$ran;
$un=  uniqid();
$dmtun = $dmt.$un;
$mdun = md5($dmtran.$un);
$sort=substr($mdun, 16); // if you want sort length code.

echo $mdun;
?>

আপনি নিজের আইডির জন্য যেকোন 'ভার' প্রতিধ্বনিত করতে পারেন। তবে d এমডুন ভাল, আপনি উন্নত কোডের জন্য এমডি 5 কে শ 1 এ প্রতিস্থাপন করতে পারেন তবে এটি খুব দীর্ঘ হবে যা আপনার প্রয়োজন হতে পারে না।

ধন্যবাদ.


7
এক্ষেত্রে এলোমেলোতা র্যান্ডম লিখিত কোড দ্বারা গ্যারান্টিযুক্ত, তাই না?
ড্যানিয়েল কুচাল

3
হ্যাঁ, এটি একধরণের "এলোমেলো" কারণ এটি আদর্শ নয়, অস্পষ্ট কোড। এটি ভবিষ্যদ্বাণী করা কঠিন করে তোলে ... তবে বাস্তবে এটি একটি এলোমেলো সংখ্যা তৈরি করতে নিরাপত্তাহীন অংশগুলি ব্যবহার করে না। সুতরাং ফলাফলটি প্রযুক্তিগতভাবে এলোমেলো বা সুরক্ষিত নয়।
ফিলিপ

4

সত্যিই এলোমেলো স্ট্রিংয়ের জন্য, আপনি ব্যবহার করতে পারেন

<?php

echo md5(microtime(true).mt_Rand());

ফলাফল:

40a29479ec808ad4bcff288a48a25d5c

সুতরাং আপনি একই সময়ে একাধিকবার স্ট্রিং উত্পন্ন করার চেষ্টা করলেও আপনি আলাদা আউটপুট পাবেন।


4

একটি এলোমেলো পাসওয়ার্ড তৈরি করার চেষ্টা করার সময় আপনি চেষ্টা করছেন:

  • প্রথমে এলোমেলো বাইটের একটি ক্রিপ্টোগ্রাফিক সুরক্ষিত সেট তৈরি করুন

  • দ্বিতীয়টি rand র্যান্ডম বাইটগুলি একটি মুদ্রণযোগ্য স্ট্রিংয়ে রূপান্তর করছে

এখন, পিএইচপি তে এলোমেলো বাইট তৈরির একাধিক উপায় রয়েছে:

$length = 32;

//PHP 7+
$bytes= random_bytes($length);

//PHP < 7
$bytes= openssl_random_pseudo_bytes($length);

তারপরে আপনি এই এলোমেলো বাইটগুলি একটি মুদ্রণযোগ্য স্ট্রিংয়ে রূপান্তর করতে চান:

আপনি বিন 2hex ব্যবহার করতে পারেন :

$string = bin2hex($bytes);

বা বেস 64_encode :

$string = base64_encode($bytes);

তবে নোট করুন যে আপনি যদি বেস 64 ব্যবহার করেন তবে স্ট্রিংয়ের দৈর্ঘ্য আপনি নিয়ন্ত্রণ করেন না। আপনি এটি করতে বিন 2hex ব্যবহার করতে পারেন, 32 বাইট ব্যবহার করে একটি 64 চর স্ট্রিংয়ে পরিণত হবে । তবে এটি কেবল ইভেন স্ট্রিংয়ের মতোই কাজ করবে ।

সুতরাং মূলত আপনি কেবল এটি করতে পারেন :

$length = 32;

if(PHP_VERSION>=7){
    $bytes= random_bytes($length);
}else{
    $bytes= openssl_random_pseudo_bytes($length);
} 

$string = bin2hex($bytes);


2
function random_string($length = 8) {
    $alphabets = range('A','Z');
    $numbers = range('0','9');
    $additional_characters = array('_','=');
    $final_array = array_merge($alphabets,$numbers,$additional_characters);
       while($length--) {
      $key = array_rand($final_array);

      $password .= $final_array[$key];
                        }
  if (preg_match('/[A-Za-z0-9]/', $password))
    {
     return $password;
    }else{
    return  random_string();
    }

 }

2

এটি একটি সাধারণ ফাংশন যা আপনাকে চিঠি এবং নম্বরগুলি (বর্ণানুক্রমিক) যুক্ত এলোমেলোভাবে স্ট্রিং তৈরি করতে দেয়। আপনি স্ট্রিং দৈর্ঘ্য সীমাবদ্ধ করতে পারেন। এই এলোমেলো স্ট্রিংগুলি বিভিন্ন উদ্দেশ্যে ব্যবহার করা যেতে পারে, সহ: রেফারেল কোড, প্রচারমূলক কোড, কুপন কোড Code ফাংশন নিম্নলিখিত পিএইচপি ফাংশনগুলির উপর নির্ভর করে: বেস_কন্ট, শ 1, ইউনিকিড, এমটি_র্যান্ড

function random_code($length)
{
  return substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, $length);
}

echo random_code(6);

/*sample output
* a7d9e8
* 3klo93
*/

1

পূর্ববর্তী উদাহরণগুলি পড়ার পরে আমি এটি নিয়ে এসেছি:

protected static $nonce_length = 32;

public static function getNonce()
{
    $chars = array();
    for ($i = 0; $i < 10; $i++)
        $chars = array_merge($chars, range(0, 9), range('A', 'Z'));
    shuffle($chars);
    $start = mt_rand(0, count($chars) - self::$nonce_length);
    return substr(join('', $chars), $start, self::$nonce_length);
}

আমি অ্যারের 10 বার নকল [0-9, AZ] করে এবং উপাদানগুলিকে বদলে ফেলি, সাবস্ট্রের () আরও বেশি 'ক্রিয়েটিভ' হওয়ার জন্য একটি এলোমেলো সূচনা পয়েন্ট পাওয়ার পরে আপনি [এজে] এবং অন্যান্য উপাদানগুলিকে অ্যারে, নকল করতে পারেন কম বেশি, আমার চেয়ে সৃজনশীল হোন


1

আমি যাচাইকরণ লিঙ্কগুলি লেনদেন করার সময় হ্যাশ কী ব্যবহার করতে চাই। আমি মাইক্রোটাইম এবং হ্যাশিং ব্যবহার করার পরামর্শ দিচ্ছি যে এমডি 5 ব্যবহার করার কারণে কীগুলি একই হওয়া উচিত কারণ মাইক্রোটাইমের উপর ভিত্তি করে হ্যাশগুলি থাকার কারণ নেই।

  1. $key = md5(rand());
  2. $key = md5(microtime());

1
<?php
function generateRandomString($length = 11) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;

}

?>

উপরের ফাংশনটি আপনাকে এলোমেলো স্ট্রিং তৈরি করবে যা দৈর্ঘ্যের 11 টি অক্ষর।


1

আপনি যদি পিএইচপি-তে একটি অনন্য স্ট্রিং উত্পন্ন করতে চান তবে নিম্নলিখিতগুলি চেষ্টা করুন।

md5(uniqid().mt_rand());

এই,

uniqid()- এটি অনন্য স্ট্রিং উত্পন্ন করবে। এই ফাংশনটি স্ট্রিম হিসাবে টাইমস্ট্যাম্প ভিত্তিক অনন্য শনাক্তকারীকে ফেরত দেয়।

mt_rand() - এলোমেলো নম্বর তৈরি করুন।

md5() - এটি হ্যাশ স্ট্রিং উত্পন্ন করবে।


0

স্কট, হ্যাঁ আপনি খুব লেখেন এবং ভাল সমাধান! ধন্যবাদ।

আমার প্রতিটি ব্যবহারকারীর জন্য আমাকে অনন্য এপিআই টোকেনও তৈরি করতে হবে। নিম্নলিখিতটি আমার পন্থা, আমি ব্যবহারকারীর তথ্য ব্যবহার করেছি (ইউজারিড এবং ব্যবহারকারীর নাম):

public function generateUniqueToken($userid, $username){

        $rand = mt_rand(100,999);
    $md5 = md5($userid.'!(&^ 532567_465 ///'.$username);

    $md53 = substr($md5,0,3);
    $md5_remaining = substr($md5,3);

    $md5 = $md53. $rand. $userid. $md5_remaining;

    return $md5;
}

দয়া করে একবার দেখুন এবং কোনও উন্নতি করতে পারি কিনা তা আমাকে জানান। ধন্যবাদ


0

এখানে আমি আমার একটি প্রকল্পে যা ব্যবহার করছি তা এটি দুর্দান্ত কাজ করছে এবং এটি একটি অনন্য রেন্ডম টোকেন উত্পন্ন করে :

$timestampz=time();

function generateRandomString($length = 60) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}


$tokenparta = generateRandomString();


$token = $timestampz*3 . $tokenparta;

echo $token;

দয়া করে মনে রাখবেন যে যাহারা ব্যবহারকারী এই টোকেনটি কীভাবে উত্পন্ন হয় তা ভেবে ভেবে বিভ্রান্তি তৈরি করতে আমি টাইমস্ট্যাম্পটি তিনটি দিয়ে বাড়িয়েছি;)

আমি আসা করি এটা সাহায্য করবে :)


1
"দয়া করে নোট করুন যে আমি এই টাইমস্ট্যাম্পটি তিনটি দ্বারা গুণিত করেছিলাম যার জন্য ব্যবহারকারী যেভাবে এই টোকেনটি তৈরি হয় তা নিয়ে ভাবছেন যে" এই টোকেনটি কীভাবে উত্পন্ন হয় "সুরক্ষার মতো সুরক্ষিত শব্দগুলি স্ট্যাকওভারফ্লো
হ্যারি

এটি "অবক্ষেপণের মাধ্যমে সুরক্ষা" নয় কারণ টাইমস্ট্যাম্পটি তখন তৈরি হওয়া এলোমেলো স্ট্রিংয়ের সাথে যুক্ত করা হয় এবং এটিই আমরা ফিরে
আসি


0

আমরা এই দুটি লাইন কোডটি ব্যবহার করতে পারি অনন্য স্ট্রিং তৈরি করতে প্রায় 10000000 বার পুনরাবৃত্তির পরীক্ষা করেছি

  $sffledStr= str_shuffle('abscdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_-+');
    $uniqueString = md5(time().$sffledStr);

0

আমি সর্বদা এটি আমার ক্রিয়াকলাপটি একটি কাস্টম এলোমেলিক সংখ্যার স্ট্রিং উত্পন্ন করতে ব্যবহার করি ... আশা করি এই সহায়তার জন্য

<?php
  function random_alphanumeric($length) {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345689';
    $my_string = '';
    for ($i = 0; $i < $length; $i++) {
      $pos = mt_rand(0, strlen($chars) -1);
      $my_string .= substr($chars, $pos, 1);
    }
    return $my_string;
  }
  echo random_alphanumeric(50); // 50 characters
?>

এটি উদাহরণস্বরূপ উত্পন্ন করে: Y1FypdjVbFCFK6Gh9FDJpe6dciwJEfV6MQGpJqAfuijaYSZ86g

আপনি যদি অন্য স্ট্রিংয়ের সাথে তুলনা করতে চান তবে এটি নিশ্চিত হয়ে যায় যে এটি একটি অনন্য ক্রম আপনি এই কৌশলটি ব্যবহার করতে পারেন ...

$string_1 = random_alphanumeric(50);
$string_2 = random_alphanumeric(50);
while ($string_1 == $string_2) {
  $string_1 = random_alphanumeric(50);
  $string_2 = random_alphanumeric(50);
  if ($string_1 != $string_2) {
     break;
  }
}
echo $string_1;
echo "<br>\n";
echo $string_2;

এটি দুটি অনন্য স্ট্রিং উত্পন্ন করে:

qsBDs4JOoVRfFxyLAOGECYIsWvpcpMzAO9pypwxsqPKeAmYLOi

Ti3kE1WfGgTNxQVXtbNNbhhvvapnaUfGMVJecHkUjHbuCb85pF

আশা করি এটিই আপনি খুঁজছেন ...


0

একটি সহজ সমাধান হ'ল বেস-অক্ষরীয় অক্ষরগুলি ত্যাগ করে বেস 64 কে বর্ণমালায় রূপান্তর করা।

এটি একটি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত ফলাফলের জন্য র্যান্ডম_বাইটস () ব্যবহার করে।

function random_alphanumeric(int $length): string
{
    $result='';
    do
    {
        //Base 64 produces 4 characters for each 3 bytes, so most times this will give enough bytes in a single pass
        $bytes=random_bytes(($length+3-strlen($result))*2);
        //Discard non-alhpanumeric characters
        $result.=str_replace(['/','+','='],['','',''],base64_encode($bytes));
        //Keep adding characters until the string is long enough
        //Add a few extra because the last 2 or 3 characters of a base 64 string tend to be less diverse
    }while(strlen($result)<$length+3);
    return substr($result,0,$length);
}


-1

আমি বিশ্বাস করি বিদ্যমান বিদ্যমান ধারণাগুলির সমস্যা হ'ল এগুলি সম্ভবত অনন্য, তবে অবশ্যই অনন্য নয় (দারিউস ওয়ালকজাকের লোলেটেচের জবাবের মধ্যে উল্লেখ করা হয়েছে)। আমার কাছে একটি সমাধান রয়েছে যা আসলে অনন্য। এটির প্রয়োজন যে আপনার স্ক্রিপ্টে কিছু ধরণের স্মৃতি রয়েছে। আমার জন্য এটি একটি এসকিউএল ডাটাবেস। আপনি সহজেই কোথাও একটি ফাইল লিখতে পারে। দুটি বাস্তবায়ন রয়েছে:

প্রথম পদ্ধতি: স্বতন্ত্রতা সরবরাহ করে এমন 1 এর পরিবর্তে দুইটি ক্ষেত্র ক্ষেত্র রয়েছে। প্রথম ক্ষেত্রটি এমন একটি আইডি নম্বর যা এলোমেলো নয় তবে অনন্য (প্রথম আইডিটি 1, দ্বিতীয় 2 ...)। আপনি যদি এসকিউএল ব্যবহার করে থাকেন তবে কেবলমাত্র স্বয়ংক্রিয় সংস্করণ সম্পত্তি সহ আইডি ক্ষেত্রটি সংজ্ঞায়িত করুন। দ্বিতীয় ক্ষেত্রটি অনন্য নয় তবে এলোমেলো। লোকেরা ইতিমধ্যে উল্লিখিত অন্য যে কোনও কৌশল দিয়ে এটি তৈরি করা যেতে পারে। স্কটের ধারণাটি ভাল ছিল তবে এমডি 5 সুবিধাজনক এবং বেশিরভাগ উদ্দেশ্যে সম্ভবত যথেষ্ট ভাল:

$random_token = md5($_SERVER['HTTP_USER_AGENT'] . time());

দ্বিতীয় পদ্ধতি: মূলত একই ধারণা, তবে প্রাথমিকভাবে সর্বাধিক সংখ্যক স্ট্রিং চয়ন করুন যা কখনই উত্পন্ন হবে। এটি একটি ট্রিলিয়ন এর মতো সত্যই বড় সংখ্যা হতে পারে। তারপরে একই জিনিসটি করুন, একটি আইডি উত্পন্ন করুন, তবে এটি শূন্য প্যাড করুন যাতে সমস্ত আইডি একই সংখ্যার হয়। তারপরে এলোমেলো স্ট্রিং সহ কেবল আইডি সংযুক্ত করুন। এটি বেশিরভাগ কাজের জন্য যথেষ্ট এলোমেলো হবে তবে আইডি বিভাগটি এটিও অনন্য বলে নিশ্চিত করবে।


-1

আপনি এই কোডটি ব্যবহার করতে পারেন, আমি আশা করি এটি আপনার পক্ষে সহায়ক হবে।

function rand_code($len)
{
 $min_lenght= 0;
 $max_lenght = 100;
 $bigL = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 $smallL = "abcdefghijklmnopqrstuvwxyz";
 $number = "0123456789";
 $bigB = str_shuffle($bigL);
 $smallS = str_shuffle($smallL);
 $numberS = str_shuffle($number);
 $subA = substr($bigB,0,5);
 $subB = substr($bigB,6,5);
 $subC = substr($bigB,10,5);
 $subD = substr($smallS,0,5);
 $subE = substr($smallS,6,5);
 $subF = substr($smallS,10,5);
 $subG = substr($numberS,0,5);
 $subH = substr($numberS,6,5);
 $subI = substr($numberS,10,5);
 $RandCode1 = str_shuffle($subA.$subD.$subB.$subF.$subC.$subE);
 $RandCode2 = str_shuffle($RandCode1);
 $RandCode = $RandCode1.$RandCode2;
 if ($len>$min_lenght && $len<$max_lenght)
 {
 $CodeEX = substr($RandCode,0,$len);
 }
 else
 {
 $CodeEX = $RandCode;
 }
 return $CodeEX;
}

পিএইচপি-তে র্যান্ডম কোড জেনারেটর সম্পর্কে বিশদ


-2

অপ্রয়োজনীয় লুপগুলি অপসারণের মাধ্যমে উপরের স্কটস কোডটি সরলকরণ যা খারাপভাবে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে নামছে open

function crypto_rand_secure($min, $max)
{
 $range = $max - $min;
 if ($range < 1) return $min; // not so random...
 $log = ceil(log($range, 2));
 $bytes = (int) ($log / 8) + 1; // length in bytes
 $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
 return $min + $rnd%$range;
}

function getToken($length)
{
 return bin2hex(openssl_random_pseudo_bytes($length)
}

দুর্ভাগ্যক্রমে, আমি আপনার সাথে একমত হতে পারি না যে এটি ক্রিপ্টো_রান্ড_সিকিউর ফাংশনের উপযুক্ত সরলীকরণ। আপনি যখন এলোমেলোভাবে উত্পাদিত সংখ্যার ফলাফল গ্রহণ করেন এবং তারপরে পরিসরকে বিভাজন করে এমন কোনও সংখ্যার দ্বারা এটি মোড করার সময় ঘটে এমন মডুলো পক্ষপাত এড়াতে লুপটি প্রয়োজনীয়। en.wikedia.org/wiki/Fishes%E2%80%93 ইয়েট_শ্যাফেল # মডুলো_বিয়াস । সীমার বাইরে কোনও সংখ্যা ফেলে দেওয়ার জন্য একটি লুপ ব্যবহার করে এবং একটি নতুন সংখ্যা নির্বাচন করে, এটি এই পক্ষপাতিত্ব এড়িয়ে চলে। stackoverflow.com/questions/10984974/…
স্কট

@ স্কট, এই পোস্টটি প্রায় র্যান্ড () তবে এই ক্ষেত্রে, এটি ইতিমধ্যে ওপেনএসএল_আরন্ডম_প্রেসো_বাইটস দ্বারা যত্ন নেওয়া হয়েছে যাতে অপ্রয়োজনীয় লুপ হয়।
মবেল

1
gist.github.com/anonymous/87e3ae6fd3320447f46b973e75c2ea85 - দয়া করে এই স্ক্রিপ্টটি চালান। আপনি দেখতে পাবেন যে ফলাফলের বিতরণ এলোমেলো নয়। 0-55 এর মধ্যে নম্বরগুলি 56-100 এর মধ্যে সংখ্যার চেয়ে বেশি সংঘটন হয়। opensslএটি ঘটায় না, এটি আপনার রিটার্নের বিবৃতিতে মডুলো পক্ষপাতিত্বের কারণে। 100 (পরিসীমা) 255 (1 বাইট) সমানভাবে ভাগ করে না এবং এই ফলাফলগুলির কারণ হয়। আপনার উত্তরের সাথে আমার সবচেয়ে বড় সমস্যাটি আপনি উল্লেখ করেছেন যে ফাংশনটি লুপ ব্যবহারের মতোই সুরক্ষিত, যা মিথ্যা। আপনার ক্রিপ্টো_রান্ড_সিকিউরের বাস্তবায়ন ক্রিপ্টোগ্রাফিকভাবে নিরাপদ নয় এবং বিভ্রান্তিকর।
স্কট

@ স্কট, আমরা এখানে খনন করছি, এটি শেষ রিটার্নের বিবৃতি সম্পর্কে নয়, এটি মডিউল ব্যবহার না করে ওপেনএসএল_আরন্ডম_সিপো_বিটেসের রিটার্ন মান থেকেও ধীরে ধীরে গণনা করা যেতে পারে। আমি যে বিষয়টিটি বলছি তা হ'ল লুপটি অপ্রয়োজনীয় একবার ওপেনএসএল_আরন্ডম_পিউডো_বাইটস এলোমেলো বাইটগুলি ফেরত দেয়। লুপ তৈরি করে, আপনি এটিকে আরও সুরক্ষিত করে তুলছেন না, কেবল এটিকে ধীর করে দিচ্ছেন।
মবেল

2
এই উত্তরটি খারাপ তথ্য প্রচার করে। আপনি সঠিক যে লুপটি opensslআরও সুরক্ষিত করে না , তবে আরও গুরুত্বপূর্ণ এটি এটি কম সুরক্ষিত করে না, এই উত্তরটি দেয়। উপরের কোডটি পুরোপুরি ভাল এলোমেলো সংখ্যা নিয়েছে এবং এটি কম সংখ্যার দিকে পক্ষপাতদুষ্ট করে ম্যাঙ্গাল করে। যদি আপনি আপনার উত্তরের উপর অস্বীকৃতি জানান যে এটি দ্রুত (লুপটি সরিয়ে দিয়ে) তবে এটি কোনও সিএসপিআরএনজি নয় তবে এটি এই সমস্যার সমাধান করবে। দয়া করে, ক্রিপ্টোর প্রেমের জন্য, ব্যবহারকারীদের জানান যে এই ফাংশনের আউটপুট পক্ষপাতদুষ্ট হতে পারে এবং এটি কোনও সমতুল্য সমাধান নয় solution লুপটি কেবল আপনাকে বিরক্ত করার জন্য নয়।
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.