如何仅使用密码在Java中加密字符串?

问题描述 投票:1回答:1

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

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

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

java string encryption password-hash
1个回答
1
投票

搜索PBKDF-基于密码的密钥派生功能。请注意-密码不是密钥(密码具有不同的长度,通常熵较少)。

尽管您可以从密码中获得密钥。如今,常用的基于密码的密钥派生功能是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),并仅采用必要数量的位来得出密钥。问题是,如果人们容易记住密码,密码通常不会那么随意。这意味着他们容易受到暴力攻击或字典攻击。

© www.soinside.com 2019 - 2024. All rights reserved.