ホームページ > Java > &#&チュートリアル > ユーザー資格情報をソフトウェアに安全に保存するにはどうすればよいですか?

ユーザー資格情報をソフトウェアに安全に保存するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-25 18:44:11
オリジナル
876 人が閲覧しました

How to Securely Store User Credentials in Software?

ユーザー認証情報を安全に保存する

安全なソフトウェア設計では、パスワードを平文で保存することは避けてください。代わりに、ハッシュおよび暗号化技術を使用して機密情報を保護します。

ステップ 1: 資格情報を文字配列に変換する

資格情報を文字列から文字配列に移行します。文字列は不変であるため、クリーンアップする前にデータが漏洩する可能性があります。一方、文字配列はすぐにクレンジングできます。

ステップ 2: 資格情報を暗号化し、一時的に復号化します

セキュリティのために元のハッシュを保持しながら資格情報を暗号化します。認証プロセス中にのみ資格情報を復号化します。認証情報のハードコーディングを避け、代わりに暗号化された構成ファイルなどに安全に保存することをお勧めします。

ステップ 3: 安全な送信のために TLS または SSL を適用する

データを暗号化するために TLS または SSL を実装するクライアントとサーバー間の通信。これにより、認証情報が盗聴から保護されます。

ステップ 4: 難読化技術を実装する

難読化技術を適用して、逆コンパイルが発生した場合でも悪意のある当事者がセキュリティ対策にアクセスできないようにします。難読化により、攻撃者が脆弱性を発見することが難しくなります。

サンプル コード

次のコード スニペットは、資格情報の暗号化と復号化を示しています。

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

public class SecureCredentials {

    private static final char[] PASSWORD = "YourEncryptionKey".toCharArray();
    private static final byte[] SALT = {
        (byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12,
        (byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12
    };

    public static void encrypt(char[] property) throws Exception {
        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));

        // Encrypt and save to temporary storage
        String encrypted = Base64.encodeBytes(pbeCipher.doFinal(property));

        // Cleanup data sources
        for (int i = 0; i < property.length; i++) {
            property[i] = 0;
        }
        property = null;
        System.gc();

        // Return encryption result
        return encrypted;
    }

    public static String decrypt(String property) throws Exception {
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
        SecretKey key = keyFactory.generateSecret(new PBEKeySpec(PASSWORD));
        Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
        pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(SALT, 20));
        return new String(pbeCipher.doFinal(Base64.decode(property)));
    }

    // Usage example
    public static void main(String[] args) {
        try {
            char[] password = "MySecurePassword".toCharArray();
            String encryptedPassword = encrypt(password);
            String decryptedPassword = decrypt(encryptedPassword);

            System.out.println("Original Password: " + String.valueOf(password));
            System.out.println("Encrypted Password: " + encryptedPassword);
            System.out.println("Decrypted Password: " + decryptedPassword);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

以上がユーザー資格情報をソフトウェアに安全に保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート