Как узнать, какой алгоритм [шифрование] поддерживается моей JVM? - PullRequest
30 голосов
/ 10 сентября 2010

Я использую 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 );
    }

}

Раскомментируйте строку setAlgorithm, и она выдаст исключение

org.jasypt.exceptions.EncryptionOperationNotPossibleException : шифрованиеподнял исключение.Возможная причина - вы используете надежные алгоритмы шифрования и не установили файлы политики неограниченной юрисдикции Java Cryptography Extension (JCE) в этой виртуальной машине Java

api говорит:

Устанавливает алгоритм, который будет использоваться для шифрования. Устанавливает алгоритм, который будет использоваться для шифрования, например, PBEWithMD5AndDES.

Этот алгоритм должен поддерживаться вашим провайдером JCE (если вы его указали, или JVM по умолчанию).провайдер, если вы этого не сделаете), и, если он поддерживается, вы также можете указать режим и заполнение для него, например, ALGORITHM / MODE / PADDING.

см .: http://www.jasypt.org/api/jasypt/apidocs/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html#setAlgorithm%28java.lang.String%29

Теперь, когда вы комментируете 'setAlgorithm', он будет использовать алгоритм по умолчанию [я думаю, это md5], и он будет работать нормально.Это означает, что md5 поддерживается моей JVM.Теперь, как узнать, какие другие алгоритмы шифрования поддерживаются моей JVM.

Спасибо,

Ответы [ 5 ]

38 голосов
/ 10 сентября 2010

Далее будут перечислены все провайдеры и сторонники алгоритмов. Какую версию Java вы используете? Если вы не используете старую версию, 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());
            }
        }

    }
}

Edit: Любая причина, почему вы не используете стандартные вещи из пакета 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)
4 голосов
/ 20 мая 2014

Средство командной строки Jasypt теперь поставляется со скриптом для этого, называемым listAlgorithms.bat для Windows и listAlgorithms.sh для Linux.

Инструкции по загрузке и использованию вы можете найти здесь: http://www.jasypt.org/cli.html#Listing_algorithms

2 голосов
/ 27 июля 2014

Я попробовал код, опубликованный @Qwerky, но он не очень полезен. Я добавил последнего поставщика BouncyCastle, и результаты, которые я получил, были очень запутанными. Это показывает более подробно, кто поставщик, версия, а также тип и имя алгоритма.

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());
    }
}
2 голосов
/ 10 сентября 2010

Если он еще не установлен, вам необходимо установить 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

1 голос
/ 24 января 2012

Qwerky по-прежнему задает «отложенный» вопрос: почему Jasypt вместо javax.crypto?

Ну, я бы порекомендовал использовать Jasypt, поскольку это простой способ шифрования для начинающих и оченьнастраивается для опытных пользователей.

С Jasypt вы можете быстро начать пользоваться преимуществами javax.crypto, немного разбираясь в JCE и криптографии.Независимо от того, хотите ли вы управлять паролями пользователей или шифровать / дешифровать данные, платформа предоставляет простую абстракцию к вопросу.

В то же время платформа предоставляет все возможности спецификации JCE, чтобы опытные пользователи моглив полном контроле.

В дополнение к этому, Jasypt предоставляет множество других функций из готовых для хорошо известных вопросов (работа с конфиденциальными данными, хранящимися в базе данных, ...)

...