Rumah >Java >javaTutorial >Bagaimana untuk Menyimpan Bukti Kelayakan Pengguna dengan Selamat dalam Perisian?

Bagaimana untuk Menyimpan Bukti Kelayakan Pengguna dengan Selamat dalam Perisian?

Patricia Arquette
Patricia Arquetteasal
2024-11-25 18:44:11876semak imbas

How to Securely Store User Credentials in Software?

Menyimpan Bukti Kelayakan Pengguna Dengan Selamat

Dalam reka bentuk perisian selamat, elakkan menyimpan kata laluan dalam teks biasa. Sebaliknya, gunakan teknik pencincangan dan penyulitan untuk melindungi maklumat sensitif.

Langkah 1: Tukar Bukti Kelayakan kepada Tatasusunan Aksara

Pindahkan bukti kelayakan daripada Strings kepada tatasusunan aksara. Rentetan tidak boleh diubah, menjadikan data terdedah kepada pendedahan sebelum pembersihan. Tatasusunan aksara, sebaliknya, boleh dibersihkan serta-merta.

Langkah 2: Sulitkan Bukti Kelayakan dan Nyahsulit Buat Sementara

Sulitkan bukti kelayakan sambil mengekalkan cincangan asal untuk keselamatan. Nyahsulit bukti kelayakan hanya semasa proses pengesahan. Adalah dinasihatkan untuk mengelakkan bukti kelayakan pengekodan keras dan sebaliknya menyimpannya dengan selamat, seperti dalam fail konfigurasi yang disulitkan.

Langkah 3: Gunakan TLS atau SSL untuk Penghantaran Selamat

Laksanakan TLS atau SSL untuk menyulitkan data penghantaran antara pelanggan dan pelayan. Ini melindungi bukti kelayakan daripada mencuri dengar.

Langkah 4: Laksanakan Teknik Pengeliruan

Gunakan teknik pengeliruan untuk menghalang pihak yang berniat jahat daripada mengakses langkah keselamatan walaupun sekiranya berlaku penyahkompilasi. Kekeliruan menyukarkan penyerang untuk mendedahkan kelemahan.

Kod Contoh

Coretan kod berikut menggambarkan kelayakan penyulitan dan penyahsulitan:

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();
        }
    }
}

Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Bukti Kelayakan Pengguna dengan Selamat dalam Perisian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn