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

Java秘书工厂生成的密钥与输入密码相同

姬银龙
2023-03-14

我试图使用PBE生成一个密钥,但SecretKeyFactory生成的密钥与输入密码完全相同。我尝试过不同的算法,迭代次数等,但仍然是一样的,所以我觉得我错过了一步。

public SecretKey generateKey(String password, String salt) {
    char[] passChars =   password.toCharArray();
    byte[] saltBytes =   salt.getBytes();
    SecretKeyFactory keyFactory =   SecretKeyFactory.getInstance("PBEWithHmacSHA256AndAES_128");
    PBEKeySpec keySpec  =   new PBEKeySpec(passChars, saltBytes, 2048, 128);
    SecretKey secretKey =   keyFactory.generateSecret(keySpec);
    byte[] encodedKey =   secretKey.getEncoded();
    System.out.println("key: " + new String(encodedKey));

    return new SecretKeySpec(encodedKey, "AES"); 
}

编辑:如果我使用算法“PBKDF2WithHmacSHA1”,那么生成的密钥与密码不同,但我使用的算法为什么会生成与输入密码完全相同的密钥?

共有1个答案

缪风史
2023-03-14

当你生成一个秘密密钥使用秘密工厂PBEWithHmacSHA256AndAES_128你会得到一个实例的com.sun.crypto.provider.PBEKey和这个类有特殊功能,它返回原始的密钥(又名密码)时调用getEncoded()而不是加密密钥材料。如果我理解正确,密钥推导将不是由密钥工厂,而是由密码本身。

因此,您不应尝试将SecretKey实例转换为SecretKeySpec实例;相反,只需在正确的密码实例中使用生成的SecretKey实例:

Cipher c = Cipher.getInstance("PBEWithHmacSHA256AndAES_128");
c.init(Cipher.ENCRYPT_MODE, secretKey);
 类似资料:
  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id

  • 我正在尝试用Java编写一个简单的密码管理器。我想用AES 256位加密用存储的密码加密文件。此外,我希望用户能够解密的文件与密码。当阅读其他在线帖子时,他们几乎都强调简单地使用密码作为密钥是不安全的,他们提到使用随机盐来增加安全性。但我不明白如何在生成密钥时使用随机盐。如果我从用户的密码和随机的salt创建密钥,那么当他们试图解密他们的文件时,我怎么知道salt是什么呢?这让我完全糊涂了。 目前

  • 我们正在使用与java安装捆绑在一起的keytool生成密钥,以进行非对称RSA加密。鉴于最近发生的事件,有人问我在java keytool的引擎盖下发生了什么。特别是关于结果数字的随机性。(例如,“为什么没有任何随机的用户输入,比如鼠标移动或键盘输入?” 那么,java keytool创建密钥的“随机性来源”是什么呢? 我自己做了一个快速的调查,但我发现的唯一信息是2000年的一篇帖子: 钥匙工

  • 我有一个用秘密定义的Azure密钥库,我可以使用“Azure密钥库”任务在devops构建管道中访问它。现在我需要将秘密变量传递给python内联脚本。 由于它是加密的,python无法直接读取该值。我如何解密并传递它们。这个秘密持有Databricks的访问令牌。我们正在尝试使用DevOps管道创建Databricks集群。 我的Yaml有以下任务 Azure KeyVault Powershe

  • 我试图在Java中使用keytool导入PKCS12证书。只有当keystore密码与证书密码相同时,它才能正常工作。keystore是否也必须使用PKCS12证书密码?

  • 问题内容: 我使用openssl生成认证密钥。这是我的命令: openssl genrsa -des3 -out enc_key.pem 1024 我导出到cer文件中,然后使用java keytool导入到Java keystore(jks)中。 密钥库听起来不错。我可以从Java应用程序加载密钥库。 问题是客户端连接到服务器(在这种情况下是FTP服务器,而不是Web服务器,而我使用apache