20 এলোমেলো বাইটের অ্যারে কীভাবে তৈরি করবেন?


130

আমি জাভাতে কীভাবে 20 টি এলোমেলো বাইট তৈরি করতে পারি?

উত্তর:



46

আপনি যদি একটি ক্রিপ্টোগ্রাফি শক্তিশালী র্যান্ডম সংখ্যা উত্পাদক একটি তৃতীয় পক্ষের এপিআই ব্যবহার না করেই (এছাড়াও নিরাপদ থ্রেড) চান, আপনি ব্যবহার করতে পারেন SecureRandom

জাভা 6 এবং 7:

SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);

জাভা 8 (আরও সুরক্ষিত):

byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);

16

আপনি যদি ইতিমধ্যে অ্যাপাচি কমন্স ল্যাং ব্যবহার করে থাকেন তবে মেকেরা RandomUtils এটিকে এক-লাইনার করে তোলে:

byte[] randomBytes = RandomUtils.nextBytes(20);

8
কিছু খনন করার পরে, র‌্যান্ডম ইউটিলস স্যাকুরআরন্ডম নয়, হুডের অধীনে ম্যাথ.র্যান্ডম () ব্যবহার করে। শুধু এই স্পষ্ট করতে চেয়েছিলেন।
Evo510

এই পদ্ধতিটির আর অস্তিত্ব নেই।
মার্টিজন হিমনস্ট্র

@ মার্তিজন হাইমস্ট্রার এটি বিদ্যমান: github.com/apache/commons-lang/blob/master/src/main/java/org/…
ডানকান জোন্স

@ ডানকোনজোনস আমি স্প্রিং বুট 2 ব্যবহার করছি যা কমন্স ল্যাং 3.7 ব্যবহার করে এবং এটি সরানো হয়েছে। উত্স কোড দেখে বোঝা যাচ্ছে যে এটির মন্তব্য করা হয়েছে। সুতরাং আমি এই কোডটিকে বিশ্বাস করব না যেহেতু একটি আপগ্রেড হতে পারে আপনার কোডটি বেমানান nder
মার্টিজন হিমনস্ট্র

8

জাভা 7 থ্রেডলোক্যালর্যান্ডম চালু করেছে যা বর্তমান থ্রেডের সাথে বিচ্ছিন্ন

এটি ম্যারিক্সের সমাধানের আরেকটি উপস্থাপনা ।

final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);

1
শব্দের পরে কিছু বন্ধনীও অনেক বেশি ThreadLocalRandom? আরও ভাল:ThreadLocalRandom.current().nextBytes(bytes);
এরউইন বলিউড

4

একটি বীজ সহ একটি এলোমেলো বস্তু তৈরি করুন এবং এ অ্যারে এলোমেলোভাবে করুন:

public static final int ARRAY_LENGTH = 20;

byte[] byteArray = new byte[ARRAY_LENGTH];
new Random(System.currentTimeMillis()).nextBytes(byteArray);
// get fisrt element
System.out.println("Random byte: " + byteArray[0]);

0

যারা এলোমেলো বাইট অ্যারে তৈরি করার জন্য আরও সুরক্ষিত উপায় চান তাদের পক্ষে হ্যাঁ সবচেয়ে সুরক্ষিত উপায় হ'ল:

byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);

তবে আপনার ওএসের উপর নির্ভর করে মেশিনে পর্যাপ্ত এলোমেলোতা না থাকলে আপনার থ্রেডগুলি ব্লক হতে পারে block নিম্নলিখিত সমাধান ব্লক করবে না:

SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);

এর কারণ এটি প্রথম উদাহরণটি /dev/randomআরও এলোমেলো হওয়ার (মাউস / কীবোর্ড এবং অন্যান্য উত্স দ্বারা উত্পন্ন) অপেক্ষা করার সময় ব্যবহার করে এবং অবরুদ্ধ হবে। দ্বিতীয় উদাহরণ ব্যবহার করে /dev/urandomযা ব্লক করবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.