Java-шифрование с алгоритмом PBEWithMD5AndDES - PullRequest
2 голосов
/ 10 января 2012

Я пытаюсь сделать некоторые вещи шифрования между сервером Java и клиентом Android. После некоторых исследований А

Вот мои настройки шифрования:

public static String encryptionAlgoirthm = "DES";
public static short encryptionBitCount = 128;
public static String hashingAlgorithm = "PBEWithMD5AndDES";
public static short hashingCount = 512;
public static String cipherTransformation = "DES/CBC/PKCS5Padding";

Но при попытке запустить сервер на моем CentOS VPS я получаю следующее:

Algorithm [PBEWithMD5AndDES] of type [SecretKeyFactory] from provider [gnu.javax.security.auth.callback.GnuCallbacks: name=GNU-CALLBACKS version=2.1] is not found.

Вот код:

    KeySpec keySpec = new PBEKeySpec(EncryptionSettings.password, EncryptionSettings.salt, EncryptionSettings.hashingCount, EncryptionSettings.encryptionBitCount);
    SecretKey tmpKey = null;

    try
    {
        tmpKey = SecretKeyFactory.getInstance(EncryptionSettings.hashingAlgorithm).generateSecret(keySpec);
    }
    catch (final InvalidKeySpecException e)
    {
        Console.writeFatalError("Unable to generate key: invalid key specification");
    } 
    catch (final NoSuchAlgorithmException e)
    {
        Console.writeFatalError("Unable to generate key: encryption algorithm not supported - " + e.getMessage());
    }

Как мне это исправить?

1 Ответ

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

Похоже, вы используете GNU JRE и в нем нет JCE.Вы можете решить эту проблему, загрузив надувной замок JCE и добавив его в качестве провайдера;

Security.addProvider(new BouncyCastleProvider());

Обратите внимание, что ваш encryptionBitCount выглядит подозрительно, так как DES имеет фиксированный ключ размером 56биты.

DES и MD5 считаются устаревшими, вместо этого вы можете попробовать AES для шифра и SHA для хеширования.API надувного замка предоставляет алгоритм PBEWITHSHAAND128BITAES-CBC-BC, который может сработать.

...