Java 带HMACSHA1的PBKDF2

Java 带HMACSHA1的PBKDF2,java,Java,谁能告诉我128*8在下面的代码中有什么用? 我已经写了密码加密的代码,但我仍然不知道这个128*8在做什么 这是我从这段代码中得到的回报: 67A0759AC6266CA215555426AAE10B18C34B436EA036247E6C0E16CD8D4199B9DF508C32CD14E50A533AC00C071888CB8167982D9BF22A89CCD1C02A9D9C76D4E5FB5C3是91711A444A3B453C54790D5B540D7F3D0EF5798CF6A

谁能告诉我128*8在下面的代码中有什么用? 我已经写了密码加密的代码,但我仍然不知道这个128*8在做什么

这是我从这段代码中得到的回报:

67A0759AC6266CA215555426AAE10B18C34B436EA036247E6C0E16CD8D4199B9DF508C32CD14E50A533AC00C071888CB8167982D9BF22A89CCD1C02A9D9C76D4E5FB5C3是91711A444A3B453C54790D5B540D7F3D0EF5798CF6A08E5ACAF10FB445E174BEDD2E59785AAC22C4E40E40F06F32FE849B01

toHex()函数如下:我认为返回的值是字符

private static String toHex(byte[] array) throws NoSuchAlgorithmException
    {
        BigInteger bi = new BigInteger(1, array);
        String hex = bi.toString(16);
        int paddingLength = (array.length * 2) - hex.length();
        if(paddingLength > 0)
        {
            return String.format("%0"  +paddingLength + "d", 0) + hex;
        }else{
            return hex;
        }
    }



public static String encrypt(String password,String key) throws NoSuchAlgorithmException, InvalidKeySpecException {

       int iterations = 4096;
        char[] chars = password.toCharArray();
        byte[] salt = key.getBytes();

        PBEKeySpec spec = new PBEKeySpec(chars, salt, iterations, 128 * 8);
        SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
        byte[] hash = skf.generateSecret(spec).getEncoded();
        return toHex(hash);
    }

第四个参数是键长度

PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)

采用密码、salt、迭代计数和待导出密钥长度的构造函数,用于生成可变密钥大小PBE密码的PBEKey。

128*8是请求的密钥长度,根据

keydlength
-要导出的密钥长度

现在还不清楚它是不是零碎的,但确实如此。因此,您需要一个1024位长的密钥(因为128*8=1024)


您将得到一个长度为256个字符的十六进制表示,每个字符都是十六进制数字。一个十六进制数字编码4位,因此您得到了一个1024位长的密钥,正如您所要求的。

那么返回字符串的长度是64个字符?(我也反对您在这里选择名称。这不是加密,这是密钥生成。我还强烈建议您不要使用无参数
String.getBytes
方法。)是的,这是密钥生成。你能告诉我什么是128*8,为什么我得到256位返回值吗?你没有得到256位返回值。你得到256个字符,每个字符编码4位。所以你得到1024位,这是你用128*8请求的。编辑了这篇文章,请看一看,你能告诉我什么是128*8吗为什么我会得到256位的返回值?请看下面@jon skeet的解释-你确定响应是256位而不是256个字符吗?我不知道返回值是位还是字符。请看我编辑的帖子。你仍然认为你的解释是对的吗?@user3387358:是的,尽管我不会这样做十六进制转换。多少你了解“位”是什么,以及十六进制是如何工作的吗?我对位和十六进制没有太多的了解。这就是我感到困惑的原因。你有什么来源可以让我了解它吗?@user3387358:我从和开始