PBEKeySpec C++ analog
PBEKeySpec C++ analog
我以前从未使用过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 字符的其他实现不兼容。