我之前从未使用过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 ++编写它?
答案 0 :(得分:1)
对于托管代码,您可以使用名称不详的Rfc2898DeriveBytes 。 RFC 2898定义了PKCS#5:基于密码的加密。此版本包括PBKDF2密码哈希(如果必须,还包括基于密码的密钥派生函数)。
对于非托管代码,似乎有an implementation of PBKDF2 in Crypto++。请注意,Java版本中的哈希也在HMAC构造中使用。 Botan也是一种选择。
请注意,Java版本直接使用密码的最低8位char
值。因此,它可能与非ASCII字符的其他实现不兼容。