ユーザー名とパスワードのリストをデータベースに保存し、それらを使用していくつかのサイトにログインし、いくつかのタスクを実行するシステムを作成しています。パスワードを安全な方法でデータベースに保存したいと考えています。ハッシュについての理解が限られているため、後でプレーンテキストを取得する必要があるため、使用できるものではないことはわかっています。また、暗号化されたパスワードをデータベースに保存することは悪い習慣だと聞きました。では、どのようなアプローチを取ることができますか?
質問する
1269 次
3 に答える
0
これがパスワードにどのような用途があるのか想像できないようですが、MySQL のAES 暗号化/復号化機能を簡単に使用できます。ユーザーごとに一意のキーを使用できるとよいでしょう。
于 2013-09-04T05:29:00.177 に答える
-1
あなたはこれを試すかもしれません
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import sun.misc.BASE64Encoder;
public class EncryptUtil {
private static final byte[] SALT = {
(byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12,
(byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12,
};
private static String encrypt(String property, char[] password) throws GeneralSecurityException, UnsupportedEncodingException {
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey key = keyFactory.generateSecret(new PBEKeySpec(password));
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(SALT, 20));
return base64Encode(pbeCipher.doFinal(property.getBytes("UTF-8")));
}
private static String base64Encode(byte[] bytes) {
// NB: This class is internal, and you probably should use another impl
return new BASE64Encoder().encode(bytes);
}
public static String encryptPassword(String username, String password) throws UnsupportedEncodingException, GeneralSecurityException{
char[] pwChar = password.toCharArray();
String encryptedPassword = encrypt(username, pwChar);
return encryptedPassword;
}
}
次に、関数を呼び出すだけですencryptPassword()
于 2013-09-03T05:45:03.340 に答える