Jumat, 01 Agustus 2025

JAVA - CEK PASSWORD STRENGTH

 


/*

 * JFrameRandom.java

 *

 * Created on 17 Agustus 2008, 21:49

 */

 

 

 

/**

 *

 * @author  Administrator

 */

import javax.swing.JOptionPane;

import java.util.*;

public class JFrameRandom extends javax.swing.JFrame {

     private String[] pesan;

     public JFrameRandom() {

        super("Password security");

        initComponents();

        pesan=new String[6];

        pesan[0]="Isi Nama dan Password !";

        pesan[1]="Password jangan terlalu pendek.\n";

        pesan[2]="Password jangan mengandung nama.\n";

        pesan[3]="Password jangan terlalu sederhana.\n";

        pesan[4]="Gunakan password yang mudah diingat.\n";

        pesan[5]="Jangan hanya menggunakan angka, kombinasikan.\n";

    }

    void tampil_pesan(int message_num) {

        if(message_num==1)

            JOptionPane.showMessageDialog(this,pesan[0]);

        else{

            txttampil.append(pesan[message_num-1]);

        }

    }

    void bersih() {

        txttampil.setText("");

        barproses.setValue(0);

    }

     int cek_angka(String angka) {

        boolean huruf=false;

         for (int i=0;i<angka.length();i++) {

            if (!Character.isDigit(angka.charAt(i))) huruf=true;

        }

         if (huruf==false) {

             return(1);

        }

         return(0);

    }

     public int hitung_karakter(String karakter) {

        Character Chr=new Character('a');

        int panjang=0;

        for (int i=0;i<karakter.length();i++) {

            if (Chr.isDigit(karakter.charAt(i))) panjang++;

        }

        return (panjang);

    }

     public int spesial_karakter(String spesial) {

        int panjang=0;

        int i=0;

        for (i=0;i<spesial.length();i++) {

            switch (spesial.charAt(i)) {

                case '!':

                    panjang++;

                    break;

                case '@':

                    panjang++;

                    break;

                case '#':

                    panjang++;

                    break;

                case '$':

                    panjang++;

                    break;

                case '%':

                    panjang++;

                    break;

                case '^':

                    panjang++;

                    break;

                case '&':

                    panjang++;

                    break;

                case '*':

                    panjang++;

                    break;

                case '(':

                    panjang++;

                    break;

                case ')':

                    panjang++;

                    break;

                case '+':

                    panjang++;

                    break;

                case '=':

                    panjang++;

                    break;

                case '[':

                    panjang++;

                    break;

                case ']':

                    panjang++;

                    break;

                case '{':

                    panjang++;

                    break;

                case '}':

                    panjang++;

                    break;

                case '-':

                    panjang++;

                    break;

                case '_':

                    panjang++;

                    break;

                case '"':

                    panjang++;

                    break;

                case '<':

                    panjang++;

                    break;

                case '>':

                    panjang++;

                    break;

                case '?':

                    panjang++;

                    break;

                case '.':

                    panjang++;

                    break;

                case ',':

                    panjang++;

                    break;

                case '/':

                    panjang++;

                    break;

                case '\'':

                    panjang++;

                    break;

            }

        }

        return(panjang);

    }

     public int cek_nilai(String txt1, String txt2) {

        if (txt1.length()==0 | txt2.length()==0) return (1);

        else return (0);

    }

     public int pesan1(String pasword) {

        if (pasword.length()<6) {

            tampil_pesan(2);

            return (1);

        }

        else

            return (pasword.length()*4);

    }

     public int pesan2(String nama, String pasword) {

        if (pasword.contains(nama)==true) {

            tampil_pesan(3);

            return (-40);

        }

        else return (10);

    }

     public int pesan3(String pasword) {

        int spesial_karakter=spesial_karakter(pasword);

       

        if (spesial_karakter < (pasword.length()/4)){

            tampil_pesan(4);

            return -30;

        }else if (spesial_karakter > (pasword.length()/2)) {

            tampil_pesan(5);

            return -10;

        }

        return (spesial_karakter*5);

    }

     public int pesan4(String pasword) {

        int angka=hitung_karakter(pasword);

         return (angka*2);

    }

     public int pesan5(String pass) {

        int nilai_angka=1;

         if (cek_angka(pass)==1) {

            tampil_pesan(6);

            nilai_angka=-20;

        }

         return (nilai_angka*10);

    }

    private void acak(){

        Random diacak=new Random();

        String kecil="qwertyuiopasdfghjklzxcvbnm";

        String besar="QWERTYUIOPASDFGHJKLZXCVBNM";

        String spesial_string="!@#$%^&**()+_-=<>.,/\\\"";

        String angka="1234567890";

        StringBuffer password=new StringBuffer();

         for(int i=0;i<10;i++){

            int charSet=diacak.nextInt(4);

            switch(charSet){

                case 0:

                    password.append(angka.charAt(diacak.nextInt(angka.length()-1)));

                    break;

                case 1:

                    password.append(spesial_string.charAt(diacak.nextInt(spesial_string.length()-1)));

                    break;

                case 2:

                    password.append(kecil.charAt(diacak.nextInt(kecil.length()-1)));

                    break;

                case 3:

                    password.append(besar.charAt(diacak.nextInt(besar.length()-1)));

            }

        }

        txtpassword.setText(password.toString());

    }

    /** This method is called from within the constructor to

     * initialize the form.

     * WARNING: Do NOT modify this code. The content of this method is

     * always regenerated by the Form Editor.

     */

    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents

    private void initComponents() {

 

        jLabel1 = new javax.swing.JLabel();

        jLabel2 = new javax.swing.JLabel();

        txtnama = new javax.swing.JTextField();

        txtpassword = new javax.swing.JTextField();

        jScrollPane1 = new javax.swing.JScrollPane();

        txttampil = new javax.swing.JTextArea();

        tombolbuat = new javax.swing.JButton();

        tombolcek = new javax.swing.JButton();

        jLabel3 = new javax.swing.JLabel();

        barproses = new javax.swing.JProgressBar();

        labelproses = new javax.swing.JLabel();

 

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

 

        jLabel1.setText("User Name :");

 

        jLabel2.setText("Password :");

 

        txttampil.setColumns(20);

        txttampil.setRows(5);

        jScrollPane1.setViewportView(txttampil);

 

        tombolbuat.setText("Auto Password");

        tombolbuat.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {

                tombolbuatActionPerformed(evt);

            }

        });

 

        tombolcek.setText("Cek  Password");

        tombolcek.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {

                tombolcekActionPerformed(evt);

            }

        });

 

        jLabel3.setText("Security :");

 

        labelproses.setText("0%");

 

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

        getContentPane().setLayout(layout);

        layout.setHorizontalGroup(

            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

            .addGroup(layout.createSequentialGroup()

                .addContainerGap()

                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 390, Short.MAX_VALUE)

                    .addGroup(layout.createSequentialGroup()

                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                            .addComponent(jLabel1)

                            .addComponent(jLabel2)

                            .addComponent(jLabel3))

                        .addGap(36, 36, 36)

                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                            .addGroup(layout.createSequentialGroup()

                                .addComponent(tombolcek)

                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

                                .addComponent(tombolbuat))

                            .addGroup(layout.createSequentialGroup()

                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)

                                    .addComponent(barproses, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

                                    .addComponent(txtpassword, javax.swing.GroupLayout.Alignment.LEADING)

                                    .addComponent(txtnama, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE))

                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

                                .addComponent(labelproses)))

                        .addContainerGap(28, Short.MAX_VALUE))))

        );

        layout.setVerticalGroup(

            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

            .addGroup(layout.createSequentialGroup()

                .addGap(38, 38, 38)

                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)

                    .addComponent(labelproses)

                    .addGroup(layout.createSequentialGroup()

                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

                            .addComponent(jLabel1)

                            .addComponent(txtnama, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

                            .addComponent(jLabel2)

                            .addComponent(txtpassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)

                            .addComponent(jLabel3)

                            .addComponent(barproses, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))

                .addGap(18, 18, 18)

                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)

                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

                    .addComponent(tombolbuat)

                    .addComponent(tombolcek))

                .addContainerGap(75, Short.MAX_VALUE))

        );

 

        pack();

    }// </editor-fold>//GEN-END:initComponents

 

    private void tombolbuatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tombolbuatActionPerformed

        // TODO add your handling code here:

        acak();

}//GEN-LAST:event_tombolbuatActionPerformed

 

    private void tombolcekActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tombolcekActionPerformed

        // TODO add your handling code here:

        bersih();

        if (cek_nilai(txtpassword.getText(),txtnama.getText())==1) {

            tampil_pesan(1);

            return;

        }

        int status=pesan1(txtpassword.getText()) + pesan2(txtnama.getText(),txtpassword.getText()) + pesan3(txtpassword.getText())+pesan4(txtpassword.getText())+pesan5(txtpassword.getText());

        if (status>100) status=100;

        else if (status<0) status=0;

        barproses.setValue(status);

        labelproses.setText(status+"%");

    }//GEN-LAST:event_tombolcekActionPerformed

   

   

    /**

     * @param args the command line arguments

     */

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {

                new JFrameRandom().setVisible(true);

            }

        });

    }

   

    // Variables declaration - do not modify//GEN-BEGIN:variables

    private javax.swing.JProgressBar barproses;

    private javax.swing.JLabel jLabel1;

    private javax.swing.JLabel jLabel2;

    private javax.swing.JLabel jLabel3;

    private javax.swing.JScrollPane jScrollPane1;

    private javax.swing.JLabel labelproses;

    private javax.swing.JButton tombolbuat;

    private javax.swing.JButton tombolcek;

    private javax.swing.JTextField txtnama;

    private javax.swing.JTextField txtpassword;

    private javax.swing.JTextArea txttampil;

    // End of variables declaration//GEN-END:variables

   

}


Tidak ada komentar: