Аналог PBEKeySpec C++

Я никогда раньше не использовал C++, но теперь мне нужно перенести эту функцию на C++:

public static byte[] getSafeKey(String key, byte[] initVector) {
    KeySpec keySpec = new PBEKeySpec(key.toCharArray(), initVector,
            ITERATION_COUNT, KEY_LENGTH);
    SecretKeyFactory keyFactory = null;
    try {
        keyFactory = SecretKeyFactory
                .getInstance("PBKDF2WithHmacSHA1");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    byte[] keyBytes = new byte[0];
    try {
        keyBytes = keyFactory.generateSecret(keySpec).getEncoded();
    } catch (InvalidKeySpecException e) {
        e.printStackTrace();
    }
    SecretKey skey = new SecretKeySpec(keyBytes, "AES");

    return skey.getEncoded();
}

До сих пор я нашел один аналог PBEKeySpec: http://beecrypt.sourceforge.net/doxygen/c++/classbeecrypt_1_1crypto_1_1spec_1_1PBEKeySpec.html

Но даже тогда я понятия не имею, что делать с keyFactory и дальше.

Есть ли простой способ написать это на C++?

1 ответ

Для управляемого кода вы можете использовать плохо названный Rfc2898DeriveBytes. RFC 2898 определяет PKCS#5: шифрование на основе пароля. Эта версия включает в себя хэш пароля PBKDF2 (или функцию получения ключа на основе пароля, если необходимо).

Для неуправляемого кода, кажется, есть реализация PBKDF2 в Crypto ++. Обратите внимание, что хеш в версии Java также используется в конструкции HMAC. Botan также вариант.

Помните, что версия Java использует 8 младших битов char Значения пароля напрямую. Поэтому он может быть несовместим с другими реализациями для символов, не относящихся к ASCII.

Другие вопросы по тегам