سؤال

أحاول تحليل شهادة X509 التي تحتوي على مفتاح عام خوارزمية توقيع رقمية (DSA).

باستخدام فئة javax.security.cert.x509certificate وطريقة getPublicKey () ، تمكنت من الحصول على p و q و g و y:

P: 0279b05d bd36b49a 6c6bfb2d 2e43da26 052ee59d f7b5ff38 f8288907 2f2a5d8e 2acad76e ec8c343e eb96edee 11
Q: 036de1
G: 03 
Y: 02790a25 22838207 4fa06715 1def9df5 474b5d84 a28b2b9b 360a7fc9 086fb2c6 9aab148f e8372ab8 66705884 6d

ومع ذلك ، لست متأكدًا من التنسيق الذي هو وكيفية تحليله لتحويله إلى Long BigInteger في Java.

هل يعرف أي شخص كيفية القيام بهذا التحويل؟

أنا أفترض حاليًا أنها سداسية وأقوم بتحليلها كما هو الحال - لكنني لست متأكدًا بنسبة 100 ٪ إذا كان هذا صحيحًا.

شكرا يا ديف

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

المحلول

يجب سابقا لديك أعداد صحيحة كبيرة. إليكم كيف تسير الأمور بالنسبة لي:

X509Certificate xc = X509Certificate.getInstance(ecert);
PublicKey pkey = xc.getPublicKey();
DSAPublicKey dk = (DSAPublicKey)pkey;
DSAParams pp = dk.getParams();
System.out.printf("p = 0x%X\n", pp.getP());
System.out.printf("q = 0x%X\n", pp.getQ());
System.out.printf("g = 0x%X\n", pp.getG());
System.out.printf("y = 0x%X\n", dk.getY());

على افتراض أن الشهادة المشفرة في ecert. واجهات DSAPublicKey و DSAParams يكون في java.security.interfaces.

يمكنك أيضًا الذهاب من خلال KeyFactory واستخدام getKeySpec() طريقة لتصدير المفتاح العام كملف DSAPublicKeySpec, ، والتي ستوفر نفس القيم مثل BigInteger حالات. لست متأكدًا مما إذا كان هناك مكسب للذهاب عبر هذا الطريق.

ما تظهره ربما يكون نوعًا من الترميز ، لكنني في حيرة لمعرفة أي واحد. على أي حال ، يجب أن تكون المعلمة "Q" بعرض 160 بت على الأقل في مفتاح Public DSA المناسب.

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