Аналог 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.