PBEKeySpec C++ analog

PBEKeySpec C++ analog

本文关键字:analog C++ PBEKeySpec      更新时间:2023-10-16

我以前从未使用过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

但即便如此,我也不知道如何处理密钥工厂和更远的地方。

有没有一种简单的方法可以用C++写它?

对于托管代码,您可以使用名称错误的 Rfc2898DeriveBytes 。RFC 2898 定义了 PKCS#5:基于密码的加密。此版本包括 PBKDF2 密码哈希(或基于密码的密钥派生函数,如果必须)。

对于非托管代码,似乎在Crypto++中实现了PBKDF2。请注意,Java 版本中的哈希也用于 HMAC 构造中。博坦也是一种选择。

请注意,Java 版本直接使用密码的最低 8 位char值。因此,它很可能与非 ASCII 字符的其他实现不兼容。