1

ユーザー名とパスワードのリストをデータベースに保存し、それらを使用していくつかのサイトにログインし、いくつかのタスクを実行するシステムを作成しています。パスワードを安全な方法でデータベースに保存したいと考えています。ハッシュについての理解が限られているため、後でプレーンテキストを取得する必要があるため、使用できるものではないことはわかっています。また、暗号化されたパスワードをデータベースに保存することは悪い習慣だと聞きました。では、どのようなアプローチを取ることができますか?

4

3 に答える 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 に答える