تشفير كلمة المرور مع الربيع / السبات - Jasypt أو شيء آخر؟ [مغلق]

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

سؤال

في كومة تطبيق جافا مع الربيع والسبات (JPA) في طبقة الوصول إلى البيانات، ما هي طرق جيدة لتطبيق تشفير كلمة المرور (نأمل استخدام التعليقات)، وحيث يمكنك معرفة المزيد عن الحصول عليها القيام به (البرنامج التعليمي، الخ)؟

ومن المفهوم أن أود أن استخدام JCA خوارزمية دعم لتشفير كلمات السر، ولكن أنا أفضل أن يكن لديك لتنفيذ المنطق المجمع إذا كان هناك طريقة سهلة.

وكنت أبحث في Jasypt، وكان أ) أتساءل إذا كان هذا هو خيار جيد وكيفية القيام بذلك وب) ما الناس آخر تستخدم لهذا الغرض. إذا كان أي شخص يستخدم Jasypt أو بديل، تفاصيل تجربتك أنها ستكون كبيرة.

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

المحلول

وجافا لديه كل المكتبات المطلوبة التي سبق تقديمها لك. ببساطة إنشاء أسلوب الأداة التي تنفذ تجزئة مع الملح كما هو موضح في OWASP .

إذا كنت حقا لا ترغب في امتلاك هذا الرمز ولا مانع من الاعتماد اضافية، ويبدو أن في مكتبة شيرو (سابقا JSecurity ) لديه <أ href = ل "http://www.jsecurity.org/api/org/jsecurity/crypto/hash/package-summary.html" يختلط = "noreferrer" عنوان = "JSecurity الثرم المرافق"> تنفيذ ما وصفها OWASP.

ويبدو أيضا أن مثل مكتبة JASYPT التي ذكرتها لها <لأ href = "http://www.jasypt.org/api/jasypt/apidocs/org/jasypt/digest/StandardStringDigester.html" يختلط = "noreferrer" عنوان = "JASYPT تجزئة"> تشبه فائدة .

وأنا أدرك أن هذا الجواب لا يذكر الربيع أو إسبات ولكن أنا ليس من الواضح كيف كنت تأمل في الاستفادة منها في هذا السيناريو.

نصائح أخرى

ويمكنك استخدام Jasypt مع السبات للتشفير أو تجزئة الممتلكات الخاصة بك على الطاير إذا thats ما أنت تبحث عن. الخوارزمية الفعلية لحساب هضم (التجزئة) بسيطة جدا باستخدام JCE إذا كنت تريد لفة بنفسك أيضا.

سوف

وMD5 أو SHA-256 على ما يرام، على الرغم من MD5 هو crackable الآن.

وربما أنا أساء فهم المشكلة، ولكن ينبغي أن مجرد المقارنة بين كلمات السر تجزئته.

في السبات، فقط تخزين كسلسلة. على الجانب التحقق من صحة، لديهم طريقة مثل:

public validate(String user, String pass)
{
    if(getUser(user).getPass().equals(getHash(pass)))
        return true;
    return false;
}

وهناك لا يبدو أن يكون وسيلة السبات محددة للقيام بذلك مع Jasypt، ولكن يمكنك انشاء التشفير encryptor كلمة المرور في الربيع:

  <!-- 
   Set up string digester here so we can configure it for more pools if it's a problem... 
  -->
  <bean id="stringDigester" class="org.jasypt.digest.PooledStringDigester">
    <!-- same settings as StrongPasswordGenerator -->
    <property name="poolSize" value="2"/>
    <property name="algorithm" value="SHA-256"/>
    <property name="iterations" value="100000"/>
    <property name="saltGenerator">
      <bean class="org.jasypt.salt.RandomSaltGenerator"/>
    </property>
    <property name="saltSizeBytes" value="16"/>
  </bean>

  <!-- ...and then we only have to deal with the passwordEncryptor interface in code. -->
  <bean id="passwordEncryptor" class="com.myproject.util.StringPasswordEncryptor">
    <property name="stringDigester" ref="stringDigester"/>
  </bean>

وبعد ذلك، يمكنك استدعاء context.getBean ( "passwordEncryptor") للحصول على التشفير encryptor، ومن ثم استدعاء إما encryptPassword () أو checkPassword ().

إذا كنت تستخدم الربيع في التطبيق الخاص بك، ثم يمكنك أيضا استخدام الأمن الربيع ، الذي يوفر لك عدة تشفير كلمة المرور، أي <لأ href = "http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/authentication/encoding/ShaPasswordEncoder. أتش تي أم أل "يختلط =" نوفولو noreferrer "> ShaPasswordEncoder يمكنك العثور على ستاكوفيرفلوو

وأنا فقط استخدام شيء مشابه لSHA-256(username + ":" + password + ":" + salt) وتخزينها في قاعدة البيانات في عمود 64 حرفا دعا باسود.

يقول

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

وهكذا لمصادقة، والحصول على المستخدم من قاعدة البيانات مع اسم المستخدم الموردة، ثم تولد نفس التجزئة باستخدام كلمة المرور المقدمة عبر محاولة تسجيل الدخول الخاصة بهم، ومقارنة ذلك في قاعدة البيانات. أيضا إضافة في بعض معدل الحد لمحاولات الدخول (على سبيل المثال، و 5 في 5 فترة دقيقة). إذا نسي المستخدم كلمة المرور الخاصة بهم، NEVER إرسالها بالبريد الإلكتروني وكلمة المرور (كما أنك لن يكون ذلك المخزن)، ولا إرسالها بالبريد الإلكتروني وكلمة المرور الجديدة ولدت، ولكن إرسالها بالبريد الإلكتروني رابطا لتغيير كلمة المرور هذه مع مفتاح تغيير كلمة المرور / حالية / الملح في عنوان URL الذي يمكنك التحقق ضده.

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