gpt4 book ai didi

java - 如何仅使用密码来加密Java中的字符串?

转载 作者:行者123 更新时间:2023-12-02 08:50:51 24 4
gpt4 key购买 nike

我正在开发一个应用程序,我需要使用用户输入的密码(作为 key )加密文本并存储它。用户可以随时通过输入密码来解密他的数据。数据的安全性应取决于密码的复杂性和长度。

我以前使用过 AES,但在这里我不能使用它,因为 AES 中的加密 key 必须具有特定的长度。我想要加密 key 可以是任意长度的东西。

我只是不知道该使用哪种加密方法或算法。

最佳答案

搜索PBKDF - 基于密码的 key 导出功能。请注意 - 密码不是 key (密码具有不同的长度并且通常熵较小)。

尽管您可以从密码中获取 key 。目前常用的基于密码的 key 派生函数有 PBKDF2、Argon2、BCrypt 或 SCrypt。只需搜索它们即可。

您可以查看一些examples

IvParameterSpec ivParamSpec = new IvParameterSpec(iv);

PBEParameterSpec pbeParamSpec = new PBEParameterSpec(psswdSalt, PBKDF_INTERATIONS, ivParamSpec);
PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
SecretKeyFactory pbeKeyFactory =
SecretKeyFactory.getInstance("PBEWithHmacSHA256AndAES_128");
SecretKey pbeKey = pbeKeyFactory.generateSecret(pbeKeySpec);

Cipher cipher = Cipher.getInstance(PBE_CIPHER_NAME);
cipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);
<小时/>

理论上 - 您可以使用简单的哈希值(例如 sha-256)并仅使用必要的位数来派生 key 。问题是,如果人们很容易记住密码,那么密码通常不会那么随机。这意味着它们很容易受到暴力攻击或字典攻击。

关于java - 如何仅使用密码来加密Java中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60786549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com