从MySQL存储和检索时获取不同的加密密码和盐

时间:2014-02-05 07:20:25

标签: java mysql encryption cryptography bouncycastle

我正在尝试使用salt加密密码并将其存储到MySQL数据库中。 我提到了这个stackOverflow question

我的代码与此类似:

private byte[] encrypt(String passwordToSave, byte[] salt)
    throws UnsupportedEncodingException
    {
        int seedBytes = 20;
        int hashBytes = 20;

        int iterations = 1000;

        if(null == salt)
        {
            SecureRandom rng = new SecureRandom();
            salt = rng.generateSeed(seedBytes);
        }
        PKCS5S2ParametersGenerator kdf = new PKCS5S2ParametersGenerator();

        kdf.init(passwordToSave.getBytes("UTF-8"), salt, iterations);

        byte[] hash =
            ((KeyParameter) kdf.generateDerivedMacParameters(8*hashBytes)).getKey();
        return hash;        
    }

我只是改变了这个功能,以便将它用于两个目的。

  1. 在创建用户帐户时加密密码并将其与salt一起存储。
  2. 在尝试登录时,使用数据库中存储的salt加密用户密码,并使用存储的密码值进行检查。
  3. 这个问题是, 我没有收回我存储的内容。 我使用了很多不同的东西,

    1. 我使用Base64进行编码并存储到数据库中并使用相同的方法进行解码。
    2. 我尝试使用VARBINARYBLOB来保存byte []数据,但没有运气。
    3. 然后我使用VARCHAR并通过使用byte[]编码类型从中创建新的字符串来存储"UTF-8"
    4. 我是密码学的新手,所以如果我错了,请指出。 提前致谢。 :)

      编辑:

      我运行加密两次时的输出:

      Salt : [34, 17, -80, -59, 93, -90, 37, -25, -11, -43, 44, 1, 10, 7, -66, -108, 97, 36, 95, -116]
      First Attempt: [-76, -3, 114, -69, 78, 21, -59, 23, 127, -15, 114, -106, -52, 23, 34, 91, 123, 6, 76, -115]
      Second Attempt: [-76, -3, 114, -69, 78, 21, -59, 23, 127, -15, 114, -106, -52, 23, 34, 91, 123, 6, 76, -115]
      Salt : [34, 17, -80, -59, 93, -90, 37, -25, -11, -43, 44, 1, 10, 7, -66, -108, 97, 36, 95, -116]
      

0 个答案:

没有答案