كيفية معرفة ما هي الخوارزمية [التشفير] التي تدعمها JVM الخاص بي؟

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

  •  02-10-2019
  •  | 
  •  

سؤال

أنا أستخدم Jasypt للتشفير. هذا هو الكود الخاص بي:

public class Encryptor {    
    private final static StandardPBEStringEncryptor pbeEncryptor = new StandardPBEStringEncryptor();
    private final static String PASSWORD = "FBL";
    private final static String ALGORITHM = "PBEWithMD5AndTripleDES";

    static{
        pbeEncryptor.setPassword( PASSWORD );
        //pbeEncryptor.setAlgorithm( ALGORITHM );       
    }

    public static String getEncryptedValue( String text ){
        return pbeEncryptor.encrypt( text );
    }

    public static String getDecryptedValue( String text ){
        return pbeEncryptor.decrypt( text );
    }

}

uncomment setAlgorithm الخط وسيقوم بإلقاء استثناء

org.jasypt.exceptions.encryptionOperationNotPossibleException: رفع التشفير نشوئها. هناك سبب محتمل هو أنك تستخدم خوارزميات تشفير قوية ولم تقم بتثبيت ملفات سياسة اختصاص القوة غير المحدودة في Java في هذا الجهاز الافتراضي Java

API يقول:

يضبط الخوارزمية المراد استخدامها في تشفير الخوارزمية لاستخدامها في التشفير ، مثل Pbewithmd5anddes.

يجب دعم هذه الخوارزمية من قبل مزود JCE الخاص بك (إذا قمت بتحديد واحد ، أو مزود JVM الافتراضي إذا لم تقم بذلك) ، وإذا تم دعمه ، يمكنك أيضًا تحديد الوضع والحث على ذلك ، مثل الخوارزمية/الوضع/الحشو .

أشير: http://www.jasypt.org/api/jasypt/apidocs/org/jasypt/encryption/pbe/standardpbestringencryptor.html#setalgorith٪28java.lang.string٪29

الآن ، عندما تعلق "setalgorithm" ، فإنها ستستخدم الخوارزمية الافتراضية [أعتقد أنها MD5] ، وسوف تعمل بشكل جيد. وهذا يعني أن MD5 مدعوم من قبل JVM الخاص بي. الآن ، كيفية معرفة خوارزميات التشفير الأخرى التي تدعمها JVM الخاص بي.

شكرًا،

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

المحلول

سيقوم ما يلي بإدراج جميع مقدمي الخدمات وداعم الخوارزميات. ما هو إصدار جافا الذي تستخدمه؟ ما لم تكن على إصدار قديم ، يجب تضمين JCE كمعيار.

import java.security.Provider;
import java.security.Security;

public class SecurityListings {
    public static void main(String[] args) {
        for (Provider provider : Security.getProviders()) {
            System.out.println("Provider: " + provider.getName());
            for (Provider.Service service : provider.getServices()) {
                System.out.println("  Algorithm: " + service.getAlgorithm());
            }
        }

    }
}

تحرير: أي سبب لعدم استخدام الأشياء القياسية من حزمة javax.crypto؟

1) توليد أ Key استخدام

Key key = SecretKeyFactory.getInstance(algorithm).generateSecret(new PBEKeySpec(password.toCharArray()));

2) إنشاء أ Cipher استخدام

cipher = Cipher.getInstance(algorithm);  

3) ابدأ تشفيرك بالمفتاح

cipher.init(Cipher.ENCRYPT_MODE, key);  

4) القيام بالتشفير مع

byte[] encrypted = cipher.doFinal(data)

نصائح أخرى

تأتي أداة سطر أوامر Jasypt الآن مع برنامج نصي للقيام بذلك يسمى listAlgorithms.bat لنظام التشغيل Windows و listAlgorithms.sh للينكس.

يمكنك العثور على تعليمات حول كيفية تنزيلها واستخدامها هنا: http://www.jasypt.org/cli.html#listing_algorithms

إذا لم يتم تثبيته بالفعل ، فأنت بحاجة إلى تثبيت JCE (ملحق تشفير Java) الذي يوفر الدعم للخوارزميات.

يمكنك أن ترى كيفية التثبيت هنا:

http://download.oracle.com/javase/1.4.2/docs/guide/security/cryptospec.html#providerinstalling

يمكن العثور على المكتبة هنا:http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.html

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

for (Provider provider : Security.getProviders()) {
    System.out.println("Provider: " + provider.getName() + " version: " + provider.getVersion());
    for (Provider.Service service : provider.getServices()) {
        System.out.printf("  Type : %-30s  Algorithm: %-30s\n", service.getType(), service.getAlgorithm());
    }
}

لا يزال هناك سؤال "معلق" طرحه Qwerky: لماذا استخدام Jasypt بدلاً من استخدام javax.crypto؟

حسنًا ، أوصي باستخدام Jasypt لأنها طريقة بسيطة للتشفير للمبتدئين وقابلة للتكوين بشكل كبير للمستخدمين ذوي الخبرة.

مع Jasypt ، يمكنك البدء في الاستفادة من javax.crypto بسرعة مع القليل من المعرفة بـ JCE والتشفير. سواء كنت ترغب في إدارة كلمات مرور المستخدم أو تشفير/فك تشفير البيانات ، يوفر Framework تجريدًا بسيطًا للسؤال.

في الوقت نفسه ، يعرض الإطار جميع إمكانيات مواصفات JCE للسماح للمستخدمين ذوي الخبرة بالتحكم الكامل.

بالإضافة إلى ذلك ، توفر Jasypt العديد من الميزات خارج الصندوق لأسئلة معروفة (التعامل مع البيانات الحساسة المخزنة في قاعدة البيانات ، ...)

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