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

使用Jasypt实现基于密码的AES加密,使用PBKDF2WithHmacSHA1密钥

麻华辉
2023-03-14
    null

我正在尝试使用Jasypt的StandardPBEStringEncryptor类

encryptor.setPassword(PASSWORD);
encryptor.setAlgorithm("AES/CBC/PKCS5Padding");
encryptor.setKeyObtentionIterations(20000);
encryptor.setSaltGenerator(new RandomSaltGenerator());
encryptor.encrypt("something");

当我这样做时,我会得到以下异常:

java.security.NosuchAlgorithmException:AES/CBC/PKCS5Padding SecretKeyFactory不可用

谢谢

共有1个答案

董胡媚
2023-03-14

最后我联系了Jasypt的首席程序员Daniel Fernández,他的回答是:

恐怕Jasypt没有提供为SecretKeyFactory和密码本身的实例化指定不同算法的方法。对不起。

我使用了这段java代码(不使用Jasypt):

public String encrypt(final String message) {
  final byte[] salt = generateSalt();
  final Key key = createKey(salt);

  final Cipher encryptingCipher = createCipher(Cipher.ENCRYPT_MODE, key, salt);
  final byte[] messageBytes = message.getBytes(StandardCharsets.UTF_8);
  final byte[] encryptedBytes = doFinal(encryptingCipher, messageBytes);
  final byte[] data = ArrayUtils.addAll(salt, encryptedBytes);
  return BaseEncoding.base64().encode(data);
}

private byte[] generateSalt() {
  final SecureRandom secureRandom = new SecureRandom();
  final byte[] salt = new byte[SALT_LENGTH];
  secureRandom.nextBytes(salt);
  return salt;
}

private Key createKey(final byte[] salt) {
  final PBEKeySpec spec = new PBEKeySpec(PASSWORD,
                                       salt,
                                       ITERATIONS,
                                       KEY_LENGTH);
  final SecretKey secretKey;
  try {
    secretKey = keyFactory.generateSecret(spec);
  } catch (final InvalidKeySpecException e) {
    throw new RuntimeException("Error creating SecretKey", e);
  }
  final SecretKeySpec result = new SecretKeySpec(secretKey.getEncoded(), ALGORITHM);
  spec.clearPassword();
  return result;
}
 类似资料:
  • 问题内容: 我找到了用Java实施AES加密/解密的指南,并试图理解每一行并将其放入自己的解决方案中。但是,我没有完全理解它,因此出现了问题。最终目标是拥有基于密码的加密/解密。我已经阅读了有关此的其他文章/ stackoverflow帖子,但是大多数文章没有提供足够的解释(我对Java加密非常陌生) 我现在的主要问题是,即使设置了 I,最后还是会得到不同的Base64结果(每次都是随机的,但是我

  • 创建随机盐。 使用SALT加密密码。 保存用户的salt和加密密码。 我想要盐的大小,算法给出作为输入。 我想要解密的原因是,我有一些为应用程序创建的配置文件和一些值是密码,我想要保存为加密的文件和解密时,我想要使用它。 谁能提供一个适当的例子或如何使用它在我自己的方式?我想实现Jasypt在文章中提到的。但没有可用的代码。

  • 问题内容: 我需要实现256位AES加密,但是我在网上找到的所有示例都使用“ KeyGenerator”来生成256位密钥,但是我想使用自己的密码。如何创建自己的密钥?我尝试将其填充到256位,但是随后出现错误消息,提示密钥太长。我确实安装了无限管辖权补丁,所以那不是问题:) 就是 KeyGenerator看起来像这样… 从这里获取的代码 编辑 我实际上是将密码填充到256个字节而不是位,这太长了

  • 我需要一些帮助来验证下面的代码片段的Java AES加密与CBC、PKCS5Padding和IV。 我测试了代码,能够加密和解密。我有几个问题如下所述。 密码应该存储在哪里? 向密码文本附加/检索salt和IV字节的方式是否正确? 高度赞赏任何其他评论,谢谢!

  • 这是我的密码 抱歉,如果我的代码一团糟。

  • 问题内容: 如何使用Java充气城堡库实现AES加密?示例代码或示例代码的链接会很不错:) 问题答案: 如果下载bcprov源,您将看到该类。它显示了如何设置bouncyCastle提供程序,如何创建加密和解密对象,如何设置s以及如何在这些流上调用write方法。 编辑 :似乎链接已损坏。看看这里的AESTest