ذاكرة التخزين المؤقت محتويات keystore وتحويلها إلى inputstream

StackOverflow https://stackoverflow.com/questions/3510580

سؤال

أنا أستخدم AES لإنجاز تشفير مفتاح متماثل. أقوم بتخزين المفتاح في كلمة مرور محمية.

يعرض واجهة برمجة التطبيقات ما يلي لتحميل المفتاح من keystore

keyStore.load(inputStream, keyStorePassword.toCharArray()); 

لذلك في كل مرة عندما أرغب في enrypt أو فك تشفيرها ، يجب أن أجتاز inputstream على الأقل في رأيي ، حيث حقق أداءً كما فعل لقراءة المحتوى في كل مرة من جديد.

هل يمكن لأي شخص مساعدتي في الخروج باستراتيجية تخزينها في الذاكرة ومنذ ذلك الحين عند الوصول إليها والتحويل إلى inputstream؟

ملحوظة :لقد حاولت قراءة محتويات keystore إلى String (UTF-8) وتحويلها إلى inputStream وتم نقلها إلى API. لكنها تبصق على بعد استثناء

java.io.ioException: نموذج keystore غير صالح

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

المحلول 2

شكرا على الردود. أنا كل شيء للبديل أدناه.

أود تحميل keystore مرة واحدة واستخراج secretkey وأعين إلى مثيل أو متغير فئة من الفصل الذي تستخدمه ثم استخدم secretkey كلما احتاج المرء إلى تشفير أو فك تشفير

نصائح أخرى

keystore هو في بعض التنسيق الثنائي. إن تحويله إلى سلسلة UTF-8 ليس جيدًا. يمكنك استخدام أ ByteArrayInputStream الذي يستخدم العازلة بايت.

ولكن: فى رايى لا تحسب عندما يتعلق الأمر بتحسين الأداء. يجب عليك القيام ببعض التنميط للتحقق مما إذا كان هذا يؤثر حقًا على الأداء. لأنه لا ينبغي. يقوم نظام التشغيل بتخزين ذاكرة التخزين المؤقت أيضًا ، وعلى الأرجح لن يقرأ نفس الملف من القرص مرارًا وتكرارًا إذا لم يتغير في هذه الأثناء. عادةً ما يكون المبرمجون سيئًا للغاية في الحكم على أجزاء من البرنامج هي خنازير الأداء وأيها ليست كذلك.

أيضًا: له سبب يتم توفير كلمات المرور عادة عبر char المصفوفات: لديك تحكم تام في محتوى الصفيف ويمكنك مسحه بمجرد عدم الحاجة إليه بعد الآن. يجب أن تظل كلمة المرور في الذاكرة قصيرة قدر الإمكان. ليس لديك هذا النوع من السيطرة مع سلاسل بسيطة (لا تعرف متى يتم جمع القمامة).

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