سؤال

أريد إنشاء تشفير مع Java.
هل هناك على أي حال للحصول على معرف وحدة المعالجة المركزية أو أي شيء يكون فريدا في جهاز الكمبيوتر مثل BIOS أو ...

علي سبيل المثال System.getCpuId(); انها مجرد مثال 😉

شكرا جزيلا ...

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة إلى معرف فريد يمكنك استخدامه uuid. :

import java.util.UUID;

public class GenerateUUID {


      public static final void main(String... aArgs){
        //generate random UUIDs
        UUID idOne = UUID.randomUUID();
        UUID idTwo = UUID.randomUUID();
        log("UUID One: " + idOne);
        log("UUID Two: " + idTwo);
      }

      private static void log(Object aObject){
        System.out.println( String.valueOf(aObject) );
      }
    } 

مثال تشغيل:

>java -cp . GenerateUUID
UUID One: 067e6162-3b6f-4ae2-a171-2470b63dff00 
UUID Two: 54947df8-0e9e-4471-a2f9-9af509fb5889

نصائح أخرى

لذلك تريد رقم فريد (أو سلسلة؟) التي تحدد كمبيوتر المستخدم؟ أو على الأقل فريدة بما فيه الكفاية بحيث تكون فرصة مكررة منخفضة للغاية، أليس كذلك؟

يمكنك الحصول على عنوان MAC لواجهة الشبكة. هذا يبذل العديد من الافتراضات، ولكن قد يكون جيدا بما يكفي لاحتياجاتك:

final byte[] address = NetworkInterface.getNetworkInterfaces().nextElement().getHardwareAddress();
System.out.println("address = " + Arrays.toString(address));

هذا يمنحك مجموعة من البايتات. يمكنك تحويل ذلك إلى معرف بعدة طرق ... مثل سلسلة عرافة.

نتوقع الدعم، عندما يحل الناس محل بتات الأجهزة في جهاز الكمبيوتر الخاص بهم.

أعتقد أن هذا الأمر الخاص بنظام التشغيل غير متوفر في Java.

هذا الرابط يظهر طريقة لتشغيله على ويندوز.

لا يمكنك (موثوق) الحصول على معلومات الأجهزة في جافا النقي. سوف تضطر إلى استخدام جني أو jni.. وبعد هل يمكنك توضيح أي نوع من نظام التشفير الذي تقوم ببناءه ولماذا تحتاج إلى معلومات الأجهزة؟

تحرير: لاحظ ستيف مكلويد أن جافا لديه networkinterface.gethardwareaddress () طريقة. ومع ذلك، هناك تحذيرات خطيرة، بما في ذلك حقيقة عدم توفر جميع تطبيقات Java الوصول إليها، ويمكن أن تكون عناوين MAC مزورة تافهة.

لا توجد طريقة للحصول على معلومات الأجهزة مباشرة مع Java بدون بعض مكتبة JNA / JNI. التي قالت، أنت يمكن احصل على "قيم فريدة من نوعها ونظام" مع System.getEnv(). وبعد على سبيل المثال،

System.getEnv("COMPUTERNAME")

يجب إرجاع اسم الكمبيوتر في نظام Windows. هذا هو، بالطبع، غير قابلة للذات غير قابلة للالكثافة. والقيم يمكن أن تتغير مع الوقت في نفس النظام. أو أن تكون هي نفسها في أنظمة مختلفة. اوه حسنا...

يجب أن تنظر أيضا في آلة يمكن أن تحتوي على أكثر من وحدة المعالجة المركزية / NIC / أي شيء وبالتالي أكثر من معرفات واحدة.

ما تبحث عنه حقا هو مصدر انتروبيا جيد، لكنني أقترح عليك بالفعل التحقيق في Architograure Java Cryptography لأنه يوفر إطارا لهذا، حتى تتمكن من التركيز على خوارزمية الفعل الفعلية.

http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/cryptospec.html.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top