【问题标题】:PBEKeySpec C++ analogPBEKeySpec C++ 模拟
【发布时间】:2016-06-07 16:06:57
【问题描述】:

我以前从未使用过 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++ 编写的简单方法?

【问题讨论】:

  • 我删除了 Crypto++ 标签。使用该技术时应添加标签;而不是“我应该做什么,我应该怎么做?”问题。
  • 是的,当然。不会再这样做了。实际上我在项目中使用它,这就是我添加标签的原因。

标签: java c++ cryptography aes


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-07-26
    • 2016-01-23
    • 2010-09-17
    • 1970-01-01
    • 2013-09-15
    • 2020-04-29
    • 2011-03-04
    • 2018-10-22
    • 2011-11-10
    相关资源
    最近更新 更多