java - মওয - জাভার ব্যবহার




একটি এলোমেলো আলফা-সাংখ্যিক স্ট্রিং কিভাবে তৈরি করবেন? (20)

আমি একটি ছদ্ম-র্যান্ডম আলফা-সংখ্যাসূচক স্ট্রিং তৈরি করতে একটি সহজ জাভা অ্যালগরিদম খুঁজছি। আমার অবস্থানে এটি একটি অনন্য সেশন / কী শনাক্তকারী হিসাবে ব্যবহৃত হবে যা "সম্ভবত" 500K + প্রজন্মের চেয়ে অনন্য হবে (আমার প্রয়োজনগুলি আসলে আরো বেশি পরিশীলিত কিছু করার দরকার নেই)। আদর্শভাবে, আমি আমার স্বতন্ত্রতা প্রয়োজন উপর নির্ভর করে একটি দৈর্ঘ্য নির্দিষ্ট করতে সক্ষম হবে। উদাহরণস্বরূপ, দৈর্ঘ্য 12 একটি জেনারেট স্ট্রিং "AEYGF7K0DM1X" মত কিছু দেখতে পারে।


অ্যালগরিদম

একটি র্যান্ডম স্ট্রিং তৈরি করার জন্য, স্ট্রিংটি পছন্দসই লম্বায় পৌঁছে পর্যন্ত গ্রহণযোগ্য প্রতীকগুলির সেট থেকে এলোমেলোভাবে টানা অক্ষরগুলিকে টানা।

বাস্তবায়ন

এখানে র্যান্ডম শনাক্তকারী তৈরির জন্য কিছুটা সহজ এবং খুব নমনীয় কোড রয়েছে। গুরুত্বপূর্ণ অ্যাপ্লিকেশন নোট জন্য অনুসরণ করে যে তথ্য পড়ুন

import java.security.SecureRandom;
import java.util.Locale;
import java.util.Objects;
import java.util.Random;

public class RandomString {

    /**
     * Generate a random string.
     */
    public String nextString() {
        for (int idx = 0; idx < buf.length; ++idx)
            buf[idx] = symbols[random.nextInt(symbols.length)];
        return new String(buf);
    }

    public static final String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    public static final String lower = upper.toLowerCase(Locale.ROOT);

    public static final String digits = "0123456789";

    public static final String alphanum = upper + lower + digits;

    private final Random random;

    private final char[] symbols;

    private final char[] buf;

    public RandomString(int length, Random random, String symbols) {
        if (length < 1) throw new IllegalArgumentException();
        if (symbols.length() < 2) throw new IllegalArgumentException();
        this.random = Objects.requireNonNull(random);
        this.symbols = symbols.toCharArray();
        this.buf = new char[length];
    }

    /**
     * Create an alphanumeric string generator.
     */
    public RandomString(int length, Random random) {
        this(length, random, alphanum);
    }

    /**
     * Create an alphanumeric strings from a secure generator.
     */
    public RandomString(int length) {
        this(length, new SecureRandom());
    }

    /**
     * Create session identifiers.
     */
    public RandomString() {
        this(21);
    }

}

ব্যবহার উদাহরণ

8 অক্ষর সনাক্তকারীর জন্য একটি অনিরাপদ জেনারেটর তৈরি করুন:

RandomString gen = new RandomString(8, ThreadLocalRandom.current());

সেশন সনাক্তকারীর জন্য একটি সুরক্ষিত জেনারেটর তৈরি করুন:

RandomString session = new RandomString();

প্রিন্টিংয়ের জন্য সহজ-পড়তে কোড সহ একটি জেনারেটর তৈরি করুন। নিম্ন চিহ্নগুলি ব্যবহার করার জন্য ক্ষতিপূরণ করার জন্য স্ট্রিং পূর্ণ আলফানিউমেরিক স্ট্রিংগুলির চেয়ে বেশি:

String easy = RandomString.digits + "ACEFGHJKLMNPQRUVWXYabcdefhijkprstuvwx";
RandomString tickets = new RandomString(23, new SecureRandom(), easy);

সেশন সনাক্তকারী হিসাবে ব্যবহার করুন

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

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

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

বস্তু সনাক্তকারী হিসাবে ব্যবহার করুন

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

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

সনাক্তকারীদের প্রত্যাশিত মোট সংখ্যা প্রদত্ত সম্ভাবনাগুলি সংঘটিত হওয়ার পক্ষে যথেষ্ট দীর্ঘায়িত সনাক্তকারীগুলিকে ব্যবহার করার জন্যও যত্ন নেওয়া উচিত। এই "জন্মদিন প্যারাডক্স" হিসাবে উল্লেখ করা হয়। সংঘর্ষের সম্ভাব্যতা, পি , প্রায় ২ 2 / ( 2 x x ), যেখানে n প্রকৃতপক্ষে উৎপন্ন সনাক্তকারী সংখ্যা, q বর্ণমালাতে স্বতন্ত্র প্রতীকগুলির সংখ্যা এবং x সনাক্তকারীর দৈর্ঘ্য। এটি একটি খুব ছোট সংখ্যা, 2 -50 বা তার কম হওয়া উচিত।

এই কাজটি দেখায় যে 500k 15-অক্ষর সনাক্তকারীগুলির মধ্যে সংঘর্ষের সম্ভাবনা প্রায় ২ -52 , যা সম্ভবত কসমেমিক রেগুলি থেকে সনাক্ত হওয়া ত্রুটিগুলির চেয়ে কম সম্ভাবনা।

UUID সঙ্গে তুলনা

তাদের স্পেসিফিকেশন অনুসারে, UUIDগুলি অনির্দেশ্য হওয়ার জন্য ডিজাইন করা হয় না এবং এটি সেশন সনাক্তকারী হিসাবে ব্যবহার করা উচিত নয়

UUID তাদের আদর্শ বিন্যাসে প্রচুর পরিমাণে জায়গা নেয়: 36 অক্ষর এনট্রোপির 1২২ বিটের জন্য। (একটি "র্যান্ডম" UUID সমস্ত বিট এলোমেলোভাবে নির্বাচিত হয় না।) একটি এলোমেলোভাবে নির্বাচিত আলফানিউমেরিক স্ট্রিং মাত্র 21 অক্ষরের মধ্যে আরো এনট্রপি প্যাক।

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


  1. আপনার প্রয়োজনীয়তা অনুযায়ী স্ট্রিং অক্ষর পরিবর্তন করুন।

  2. স্ট্রিং অপরিবর্তনীয়। এখানে StringBuilder.appendস্ট্রিং concatenation তুলনায় আরো দক্ষ।


public static String getRandomString(int length) {
       final String characters = "[email protected]#$%^&*()_+";
       StringBuilder result = new StringBuilder();
       while(length > 0) {
           Random rand = new Random();
           result.append(characters.charAt(rand.nextInt(characters.length())));
           length--;
       }
       return result.toString();
    }

আপনি এই জন্য Apache লাইব্রেরি ব্যবহার করতে পারেন: RandomStringUtils

RandomStringUtils.randomAlphanumeric(20).toUpperCase();

আপনি যদি Apache ক্লাসগুলি ব্যবহারে খুশি হন তবে আপনি org.apache.commons.text.RandomStringGenerator (commons-text) ব্যবহার করতে পারেন।

উদাহরণ:

RandomStringGenerator randomStringGenerator =
        new RandomStringGenerator.Builder()
                .withinRange('0', 'z')
                .filteredBy(CharacterPredicates.LETTERS, CharacterPredicates.DIGITS)
                .build();
randomStringGenerator.generate(12); // toUpperCase() if you want

কমন্স-ল্যাং 3.6 থেকে, RandomStringUtils



একটি সংক্ষিপ্ত এবং সহজ সমাধান, কিন্তু শুধুমাত্র ছোট হাতের অক্ষর এবং সংখ্যাসূচক ব্যবহার করে:

Random r = new java.util.Random ();
String s = Long.toString (r.nextLong () & Long.MAX_VALUE, 36);

আকারটি বেস 36 এর 1২ ডিজিট এবং এভাবে আরও উন্নত করা যাবে না। অবশ্যই আপনি একাধিক দৃষ্টান্ত যোগ করতে পারেন।


এখানে কেউ সুপারিশ করছেন না তবে:

import java.util.UUID

UUID.randomUUID().toString();

সহজ।

এই সুবিধা UUIDs দীর্ঘ এবং দীর্ঘ এবং সংঘর্ষ প্রায় অসম্ভব হতে নিশ্চিত।

উইকিপিডিয়া এর একটি ভাল ব্যাখ্যা আছে:

"... পরবর্তী 100 বছরে প্রতি সেকেন্ডে 1 বিলিয়ন ইউयूআইডি উৎপন্ন করার পরে, শুধুমাত্র একটি নকল তৈরির সম্ভাবনা প্রায় 50% হবে।"

http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates

প্রথম 4 বিট সংস্করণের জন্য সংস্করণ টাইপ এবং 2 হয় যাতে আপনি 1২2 বিট র্যান্ডম পান। তাই যদি আপনি চান যে আপনি UUID এর আকার হ্রাস করতে শেষ থেকে ছিন্ন করতে চান । এটি সুপারিশ করা হয় না তবে আপনার এখনও 500K রেকর্ডগুলি সহজতর জন্য অনাক্রম্যতা লোড আছে।


এটি কোনো বহিরাগত লাইব্রেরি ছাড়া সহজে অর্জনযোগ্য।

1. ক্র্রিপ্টোগ্রাফিক ছদ্ম র্যান্ডম ডেটা জেনারেশন

প্রথম আপনি একটি ক্রিপ্টোগ্রাফিক PRNG প্রয়োজন। জাভাতে SecureRandom রয়েছে যা সাধারণত যন্ত্রের সেরা এনট্রপি উত্স ব্যবহার করে (যেমন /dev/random )। এখানে আরো পড়ুন।

SecureRandom rnd = new SecureRandom();
byte[] token = new byte[byteLength];
rnd.nextBytes(token);

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

2. সম্ভাব্য মান প্রয়োজনীয় স্থান

পরবর্তী আপনি আপনার টোকেন হতে হবে "কিভাবে অনন্য" সিদ্ধান্ত নিতে হবে। এনট্রপি বিবেচনা করার সম্পূর্ণ ও একমাত্র বিন্দু নিশ্চিত করে যে সিস্টেমটি বর্বর বাহিনীর আক্রমণ প্রতিরোধ করতে পারে: সম্ভাব্য মূল্যের স্থান এত বড় হওয়া দরকার যে কোনও আক্রমণকারী অযৌক্তিক সময়ে 1 মানগুলির একটি অনুপযুক্ত অনুপাতের চেষ্টা করতে পারে। র্যান্ডম UUID র মতো অনন্য সনাক্তকারীর 122 বিট এনট্রপি (অর্থাৎ ২ ^ 1২2 = 5.3x10 ^ 36) - সংঘর্ষের সম্ভাবনা "* (...) হতে পারে যেখানে দ্বৈততার এক বিলিয়ন সম্ভাবনা রয়েছে, 103 ট্রিলিয়ন সংস্করণ 4 UUIDs 2 উত্পন্ন করা আবশ্যক "। আমরা 128 বিট বেছে নেব কারণ এটি ঠিক 16 বাইটের মধ্যেই ফিট করে এবং মূলত প্রত্যেকের জন্য অনন্য হওয়ার জন্য অত্যন্ত পর্যাপ্ত হিসাবে দেখা হয় তবে সর্বাধিক চরম, ক্ষেত্রে ব্যবহার করুন এবং আপনাকে সদৃশ সম্পর্কে চিন্তা করতে হবে না। এখানে জন্মদিনের সমস্যার সহজ বিশ্লেষণ সহ এনট্রপি এর একটি সহজ তুলনা টেবিল।

সাধারণ প্রয়োজনীয়তাগুলির জন্য 8 বা 1২ বাইট দৈর্ঘ্য যথেষ্ট হতে পারে, তবে 16 বাইটের সাথে আপনি "নিরাপদ পাশে" রয়েছেন।

এবং যে মূলত এটা। শেষ জিনিসটি এনকোডিং সম্পর্কে চিন্তা করা যাতে এটি একটি মুদ্রণযোগ্য পাঠ্য (পঠন, একটি String ) হিসাবে উপস্থাপিত হতে পারে।

3. টেক্সট এনকোডিং বাইনারি

বৈশিষ্টসূচক এনকোডিং অন্তর্ভুক্ত:

  • Base64 প্রতিটি অক্ষর 6bit একটি 33% ওভারহেড তৈরি encodes। দুর্ভাগ্যবশত জেডিকে ( 7 এবং তারপরে - Android এবং জাভা 8+ এ আছে ) কোনও আদর্শ বাস্তবায়ন নেই । কিন্তু অনেক লাইব্রেরি বিদ্যমান এই বিদ্যমান । নিম্নগামী হয়, যে স্ট্যান্ডার্ড Base64 যেমন জন্য নিরাপদ নয়। ইউআরএল এবং অতিরিক্ত ফাইল সিস্টেমে ফাইল নাম হিসাবে অতিরিক্ত এনকোডিং প্রয়োজন (যেমন ইউআরএল এনকোডিং ) বা বেস 64 এর URL নিরাপদ সংস্করণ ব্যবহার করা হয় । প্যাডিং সহ 16 বাইট উদাহরণ এনকোডিং: XfJhfv3C0P6ag7y9VQxSbw==

  • বেস 32 প্রতিটি অক্ষর 5bit একটি 40% overhead তৈরি encodes। কেস-ইনসেন্সটিভ আলফা-সংখ্যাসূচক থাকার সময় এটি AZ এবং 2-7 ব্যবহার করে এটি কার্যকরভাবে কার্যকর কার্যকর করবে। জেডিকে কোন আদর্শ বাস্তবায়ন নেই। প্যাডিং ছাড়াই 16 বাইট এনকোডিং উদাহরণ: WUPIL5DQTZGMF4D3NX5L7LNFOY

  • Base16 (হেক্স) প্রতিটি চরিত্র এনকোড 4bit প্রতি বাইট 2 অক্ষর প্রয়োজন (অর্থাৎ 16 বাইট দৈর্ঘ্য 32 একটি স্ট্রিং তৈরি)। সুতরাং Base32 চেয়ে কম স্পেস দক্ষ কিন্তু অধিকাংশ ক্ষেত্রে (url) ব্যবহার করা নিরাপদ, কারণ এটি শুধুমাত্র 0-9 এবং A থেকে F । উদাহরণ এনকোডিং 16 বাইট: 4fa3dd0f57cb3bf331441ed285b27735এখানে হেক্স রূপান্তর সম্পর্কে একটি SO আলোচনা দেখুন।

Base85 এবং বহিরাগত Base122 Base85 মতো অতিরিক্ত এনকোডিংগুলি ভাল / খারাপ স্থান দক্ষতার সাথে বিদ্যমান। আপনি নিজের এনকোডিং তৈরি করতে পারেন (যা মূলত এই থ্রেডে বেশিরভাগ উত্তর দেয়) তবে যদি আপনার খুব নির্দিষ্ট প্রয়োজনীয়তা না থাকে তবে আমি এটির বিরুদ্ধে পরামর্শ দেব। উইকিপিডিয়া নিবন্ধে আরও এনকোডিং স্কিম দেখুন

4. সারসংক্ষেপ এবং উদাহরণ

  • SecureRandom ব্যবহার করুন
  • সম্ভাব্য মান অন্তত 16 বাইট (2 ^ 128) ব্যবহার করুন
  • আপনার প্রয়োজনীয়তা অনুযায়ী এনকোড (সাধারণত hex বা base32 যদি আপনি এটি alpha-numeric হতে প্রয়োজন)

না

  • ... আপনার হোম ব্রু এনকোডিং ব্যবহার করুন: অন্যের জন্য ভাল রক্ষণযোগ্য এবং পঠনযোগ্য যদি তারা দেখতে পায় যে কোনও স্ট্যান্ডার্ড এনকোডিং আপনি কোন সময়ে অক্ষর তৈরির জন্য অদ্ভুত পরিবর্তে ব্যবহার করেন।
  • ... UUID ব্যবহার করুন: আপনি 6 বিট এনট্রপি নষ্ট করছেন এবং শব্দের স্ট্রিং উপস্থাপনা আছে

উদাহরণ: হেক্স টোকেন জেনারেটর

public static String generateRandomHexToken(int byteLength) {
    SecureRandom secureRandom = new SecureRandom();
    byte[] token = new byte[byteLength];
    secureRandom.nextBytes(token);
    return new BigInteger(1, token).toString(16); //hex encoding
}

//generateRandomHexToken(16) -> 2189df7475e96aa3982dbeab266497cd

উদাহরণ: টুল

আপনি যদি প্রস্তুত-ব্যবহারযোগ্য ক্লি সরঞ্জাম চান তবে আপনি ডাইস ব্যবহার করতে পারেন: https://github.com/patrickfav/dice


জাভা সরাসরি এই কাজ করার একটি উপায় সরবরাহ করে। আপনি যদি ড্যাশগুলি না চান তবে সেগুলিকে সরানো সহজ। শুধু uuid.replace("-", "") ব্যবহার uuid.replace("-", "")

import java.util.UUID;

public class randomStringGenerator {
    public static void main(String[] args) {
        System.out.println(generateString());
    }

    public static String generateString() {
        String uuid = UUID.randomUUID().toString();
        return "uuid = " + uuid;
    }
}

আউটপুট:

uuid = 2d7428a6-b58c-4008-8575-f05549f16316

"সহজ" সমাধান সম্পর্কিত এই উত্তরগুলির মধ্যে কোনটি সত্যিই পছন্দ করবেন না: এস

আমি একটি সহজ জন্য যেতে হবে;), বিশুদ্ধ জাভা, এক মাছ ধরার নৌকা (এনট্রপি র্যান্ডম স্ট্রিং দৈর্ঘ্য এবং প্রদত্ত অক্ষর সেট উপর ভিত্তি করে):

public String randomString(int length, String characterSet) {
    return IntStream.range(0, length).map(i -> new SecureRandom().nextInt(characterSet.length())).mapToObj(randomInt -> characterSet.substring(randomInt, randomInt + 1)).collect(Collectors.joining());
}

@Test
public void buildFiveRandomStrings() {
    for (int q = 0; q < 5; q++) {
        System.out.println(randomString(10, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"));//charachterSet can basically be anything
    }
}

অথবা (একটু বেশি পঠনযোগ্য পুরানো উপায়)

public String randomString(int length, String characterSet) {
    StringBuilder sb = new StringBuilder(); //consider using StringBuffer if needed
    for (int i = 0; i < length; i++) {
        int randomInt = new SecureRandom().nextInt(characterSet.length());
        sb.append(characterSet.substring(randomInt, randomInt + 1));
    }
    return sb.toString();
}

@Test
public void buildFiveRandomStrings() {
    for (int q = 0; q < 5; q++) {
        System.out.println(randomString(10, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")); //charachterSet can basically be anything
    }
}

কিন্তু অন্যদিকে আপনি ইউআইআইডি-র সাথেও যেতে পারেন যার বেশ ভাল এনট্রপি রয়েছে ( 2 ):

UUID.randomUUID().toString().replace("-", "")

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



আপনি 64 বিট র্যান্ডম তথ্য পেতে তার GetLeastSignificantBits () বার্তাটি দিয়ে UUID শ্রেণীটি ব্যবহার করতে পারেন, তারপরে এটি একটি রেডিক্স 36 নম্বর (অর্থাত্ 0 -9, AZ সহ একটি স্ট্রিং) রূপান্তর করুন:

Long.toString(Math.abs( UUID.randomUUID().getLeastSignificantBits(), 36));

এটি 13 অক্ষরের দীর্ঘ পর্যন্ত একটি স্ট্রিং উত্পন্ন করে। আমরা math.abs () ব্যবহার করে নিশ্চিত করতে একটি ক্ষুদ্র চিহ্ন সাইন ইন নেই।


যদি আপনার পাসওয়ার্ড বাধ্যতামূলক নম্বর সংখ্যা বর্ণমালা বিশেষ অক্ষর থাকে তবে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

private static final String NUMBERS = "0123456789";
private static final String UPPER_ALPHABETS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String LOWER_ALPHABETS = "abcdefghijklmnopqrstuvwxyz";
private static final String SPECIALCHARACTERS = "@#$%&*";
private static final int MINLENGTHOFPASSWORD = 8;

public static String getRandomPassword() {
    StringBuilder password = new StringBuilder();
    int j = 0;
    for (int i = 0; i < MINLENGTHOFPASSWORD; i++) {
        password.append(getRandomPasswordCharacters(j));
        j++;
        if (j == 3) {
            j = 0;
        }
    }
    return password.toString();
}

private static String getRandomPasswordCharacters(int pos) {
    Random randomNum = new Random();
    StringBuilder randomChar = new StringBuilder();
    switch (pos) {
        case 0:
            randomChar.append(NUMBERS.charAt(randomNum.nextInt(NUMBERS.length() - 1)));
            break;
        case 1:
            randomChar.append(UPPER_ALPHABETS.charAt(randomNum.nextInt(UPPER_ALPHABETS.length() - 1)));
            break;
        case 2:
            randomChar.append(SPECIALCHARACTERS.charAt(randomNum.nextInt(SPECIALCHARACTERS.length() - 1)));
            break;
        case 3:
            randomChar.append(LOWER_ALPHABETS.charAt(randomNum.nextInt(LOWER_ALPHABETS.length() - 1)));
            break;
    }
    return randomChar.toString();

}

হয়তো এই সহায়ক

package password.generater;

import java.util.Random;

/**
 *
 * @author dell
 */
public class PasswordGenerater {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int length= 11;
        System.out.println(generatePswd(length));

        // TODO code application logic here
    }
    static char[] generatePswd(int len){
        System.out.println("Your Password ");
        String charsCaps="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
        String Chars="abcdefghijklmnopqrstuvwxyz";
        String nums="0123456789";
        String symbols="[email protected]#$%^&*()_+-=.,/';:?><~*/-+";
        String passSymbols=charsCaps + Chars + nums +symbols;
        Random rnd=new Random();
        char[] password=new char[len];

        for(int i=0; i<len;i++){
            password[i]=passSymbols.charAt(rnd.nextInt(passSymbols.length()));
        }
      return password;

    }
}

এখানে AbacusUtil দ্বারা একটি লাইন কোডAbacusUtil

String.valueOf(CharStream.random('0', 'z').filter(c -> N.isLetterOrDigit(c)).limit(12).toArray())

র্যান্ডম মানে এটি অনন্য হতে হবে না। ব্যবহার করে অনন্য স্ট্রিং পেতে:

N.uuid() // e.g.: "e812e749-cf4c-4959-8ee1-57829a69a80f". length is 36.
N.guid() // e.g.: "0678ce04e18945559ba82ddeccaabfcd". length is 32 without '-'

import java.util.*;
import javax.swing.*;
public class alphanumeric{
    public static void main(String args[]){
        String nval,lenval;
        int n,len;

        nval=JOptionPane.showInputDialog("Enter number of codes you require : ");
        n=Integer.parseInt(nval);

        lenval=JOptionPane.showInputDialog("Enter code length you require : ");
        len=Integer.parseInt(lenval);

        find(n,len);

    }
    public static void find(int n,int length) {
        String str1="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        StringBuilder sb=new StringBuilder(length);
        Random r = new Random();

        System.out.println("\n\t Unique codes are \n\n");
        for(int i=0;i<n;i++){
            for(int j=0;j<length;j++){
                sb.append(str1.charAt(r.nextInt(str1.length())));
            }
            System.out.println("  "+sb.toString());
            sb.delete(0,length);
        }
    }
}

import java.util.Random;

public class passGen{
    //Verison 1.0
    private static final String dCase = "abcdefghijklmnopqrstuvwxyz";
    private static final String uCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String sChar = "[email protected]#$%^&*";
    private static final String intChar = "0123456789";
    private static Random r = new Random();
    private static String pass = "";

    public static void main (String[] args) {
        System.out.println ("Generating pass...");
        while (pass.length () != 16){
            int rPick = r.nextInt(4);
            if (rPick == 0){
                int spot = r.nextInt(25);
                pass += dCase.charAt(spot);
            } else if (rPick == 1) {
                int spot = r.nextInt (25);
                pass += uCase.charAt(spot);
            } else if (rPick == 2) {
                int spot = r.nextInt (7);
                pass += sChar.charAt(spot);
            } else if (rPick == 3){
                int spot = r.nextInt (9);
                pass += intChar.charAt (spot);
            }
        }
        System.out.println ("Generated Pass: " + pass);
    }
}

তাই এই কি শুধু স্ট্রিং মধ্যে পাসওয়ার্ড যোগ করুন এবং ... হ্যাঁ ভাল কাজ এটি পরীক্ষা করে দেখুন ... খুব সহজ। আমি এটি লিখেছিলাম


public static String generateSessionKey(int length){
String alphabet = 
        new String("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); //9
int n = alphabet.length(); //10

String result = new String(); 
Random r = new Random(); //11

for (int i=0; i<length; i++) //12
    result = result + alphabet.charAt(r.nextInt(n)); //13

return result;
}

public static String getRandomString(int length) {
        char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST".toCharArray();

        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < chars.length; i++) {
            char c = chars[random.nextInt(chars.length)];
            sb.append(c);
        }
        String randomStr = sb.toString();

        return randomStr;
    }

public static String randomSeriesForThreeCharacter() {
    Random r = new Random();
    String value="";
    char random_Char ;
    for(int i=0; i<10;i++)
    { 
        random_Char = (char) (48 + r.nextInt(74));
        value=value+random_char;
    }
    return value;
}







alphanumeric