PBEKeySpec C ++模拟

时间:2016-06-07 16:06:57

标签: java c++ cryptography aes

我之前从未使用过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 个答案:

答案 0 :(得分:1)

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

对于非托管代码,似乎有an implementation of PBKDF2 in Crypto++。请注意,Java版本中的哈希也在HMAC构造中使用。 Botan也是一种选择。

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