首页 > 解决方案 > Java中的PKCS5_PBKDF2_HMAC_SHA1

问题描述

必须在 Java 中实现 openssl 函数 - PKCS5_PBKDF2_HMAC_SHA1(keyData, 8, salt, 8, iterCount, KEY_SIZE, key))。

下面是我的Java代码

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(customerId.toCharArray(), RefundUtil.getSalt(), iterationCount, bitLength);
SecretKey tmp = factory.generateSecret(spec);
byte[] pbkdf2Key = tmp.getEncoded();

上面的Java代码正确吗?

标签: javacryptographyaespbkdf2javax.crypto

解决方案


这通常是我实现的方式PBKDF2_HMAC_SHA1

private static byte[] getSalt(int saltSize){
        SecureRandom secureRandom = new SecureRandom();
        byte[] salt = new byte[saltSize];
        secureRandom.nextBytes(salt);
        this.MC = salt;
        return salt;
    }

    public static byte[] hashPassword(char[] password, int saltSize) throws NoSuchAlgorithmException, InvalidKeySpecException{
        byte[] salt = getSalt(saltSize);

        PBEKeySpec pbeKeySpec = new PBEKeySpec(password,salt,iterations,hashBites);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
        return keyFactory.generateSecret(pbeKeySpec).getEncoded();
    }  

您的实施将正常工作


推荐阅读