当前位置: 首页 > 知识库问答 >
问题:

如何在Java中使用BouncyCastle API对密码进行加密和加盐?

钱志
2023-03-14

我对密码学相当陌生,我正在使用bouncycasetle api加密密码并将其存储在数据库中。对于加密,我使用sha-1算法,并且我想对密码加盐,以防止它对字典攻击。

如有任何帮助,我们将不胜感激。

共有1个答案

严斌
2023-03-14

为此,我建议使用基于密码的密钥派生函数,而不是基本的哈希函数。类似这样的事情:

// tuning parameters

// these sizes are relatively arbitrary
int seedBytes = 20;
int hashBytes = 20;

// increase iterations as high as your performance can tolerate
// since this increases computational cost of password guessing
// which should help security
int iterations = 1000;

// to save a new password:

SecureRandom rng = new SecureRandom();
byte[] salt = rng.generateSeed(seedBytes);

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

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

// now save salt and hash

// to check a password, given the known previous salt and hash:

kdf = new Pkcs5S2ParametersGenerator();
kdf.init(passwordToCheck.getBytes("UTF-8"), salt, iterations);

byte[] hashToCheck =
    ((KeyParameter) kdf.generateDerivedMacParameters(8*hashBytes)).getKey();

// if the bytes of hashToCheck don't match the bytes of hash
// that means the password is invalid
 类似资料:
  • 问题内容: 我对 密码学还很陌生 ,我正在使用它来 加密 密码并将其存储在数据库中。对于 加密, 我正在使用算法,并且希望对密码加盐以防止再次发生字典攻击。 任何帮助,将不胜感激。 问题答案: 我建议为此使用基于密码的密钥派生函数,而不是基本的哈希函数。像这样:

  • 我想得到的是 使用libnail加密密码salt 我有一个列表的盐,我想用它来加密/解密我的密码。当我加密密码时,我得到一个哈希返回,这样一个似乎可以工作,但在解密时,我总是得到假返回值。 我是否使用了错误的方法对libnaude进行加密/解密,还是完全朝着错误的方向行驶? 我的加密/解密源: 我感谢任何帮助! 多姆

  • 问题内容: 我想生成rsa密钥对(公共和私有),然后将它们用于AES加密和解密。例如,用于加密的公共密钥和用于解密的私有密钥。我为此编写了一个简单的代码,但是问题是当我运行时这段代码我得到这个错误: 我该如何解决这个问题?我的加密代码如下: 问题答案: 如评论中所建议,我搜索了“混合密码术”。这个例子解决了我的问题。

  • 问题内容: 这是我正在做的事情,可能看起来有些笨拙,但是可以帮助您解决该问题。我得到一个。阅读几乎所有相关主题,但找不到合适的解决方案。我是加密解密程序设计的新手,需要在我的Java应用程序之一中实现它。 谢谢..这就是代码的样子.... 问题答案: 在这里,您需要了解的是密文可能包含不可打印的字符。因此,当您使用readLine()时,它可能不会为您提供文件中的所有字节。 同样,它并没有给您您认

  • 我正在尝试使用RSA和OAEPPadding对实际更大的数据(比如10 KB)执行非对称加密和解密。 许多Stackoverflow文章提到使用混合方法[不对称对称],但我并不是在寻找这种方法。我故意要求非对称加密。 我初始化加密和解密密码如下: 下面是我试图加密或解密大小为10 KB的大数据的代码。 以下是我收到的例外情况: 请告诉我如何对大数据执行RSA加密和解密。

  • 问题内容: 以下代码对我来说可以用BlowFish加密对字符串加密。 如果我想定义自己的密钥,该怎么做? 问题答案: