Senin, 22 Januari 2018

OTP

Nama: Intan Dewi M
Nim: 5150311100

Berikut ini langkah-langkah membuat one time password dengan menggunakan aplikasi NetBeans:
1. new project pada NetBeans kemudian langsung saja next


 2. isi nama project sesuai keinginan, disini saya menamai project saya dengan nama OTP. Sesuai dengan project yang akan kita buat. Kemudian klik tombol Finish

 3. dilanjutkan dengan membuat beberapa package di dalam project OTP yang terdiri dari dec, enc, gui, otp, random beserta dengan class-class nya

 4. kemudian buat interface seperti dibawah ini di dalam FrameLogin


 5. lalu ke source pada FrameLogin nya. Masukan syntax berikut dan sesuaikan dengan project yang dibuat

package gui;
import dec.Decrypt;
import enc.Encrypt;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author Dell e5440 i5 NVIDIA
 */
public class FrameLogin extends javax.swing.JFrame {

    /**
     * Creates new form FromLogin
     */
    public FrameLogin() {
        initComponents();
        jLblAslinya.setText(getPwdAsli());
        jLblPalsu.setText(getPwdPalsu());

    }
     private String getPwdAsli(){
        Encrypt enc = new Encrypt();
        return enc.getAsli();
    }
    private String getPwdPalsu(){
        Encrypt enc = new Encrypt();
        return enc.getPalsu();
    }

    /**
     * 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.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jPasswordField1 = new javax.swing.JPasswordField();
        jButton1 = new javax.swing.JButton();
        jTxtToDecrypt = new javax.swing.JTextField();
        jBtnToDecrypt = new javax.swing.JButton();
        jLblAsli = new javax.swing.JLabel();
        jLblPalsu = new javax.swing.JLabel();
        jLblAslinya = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("FORM LOGIN");

        jLabel2.setText("Username");

        jLabel3.setText("Password");

        jPasswordField1.setText("jPasswordField1");

        jButton1.setText("LOGIN");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jBtnToDecrypt.setText("DECRYPT");
        jBtnToDecrypt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnToDecryptActionPerformed(evt);
            }
        });

        jLblAsli.setText("HASIL");

        jLblPalsu.setText("856657");

        jLblAslinya.setText("843745");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(164, 164, 164)
                        .addComponent(jLabel1))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(143, 143, 143)
                        .addComponent(jButton1))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(28, 28, 28)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLblAsli)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addGroup(layout.createSequentialGroup()
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel2)
                                        .addComponent(jLabel3))
                                    .addGap(43, 43, 43)
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                        .addComponent(jTextField1)
                                        .addComponent(jPasswordField1, javax.swing.GroupLayout.DEFAULT_SIZE, 137, Short.MAX_VALUE)))
                                .addGroup(layout.createSequentialGroup()
                                    .addComponent(jTxtToDecrypt, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 31, Short.MAX_VALUE)
                                    .addComponent(jBtnToDecrypt))))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 80, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLblPalsu)
                    .addComponent(jLblAslinya))
                .addGap(28, 28, 28))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField1, 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(jLabel3)
                    .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jButton1)
                .addGap(63, 63, 63)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTxtToDecrypt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jBtnToDecrypt))
                .addGap(18, 18, 18)
                .addComponent(jLblAsli)
                .addContainerGap(47, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addGap(43, 43, 43)
                .addComponent(jLblPalsu)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLblAslinya)
                .addGap(0, 0, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponent() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jPasswordField1 = new javax.swing.JPasswordField();
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLblPalsu = new javax.swing.JLabel();
        jTxtToDecrypt = new javax.swing.JTextField();
        jBtnToDecrypt = new javax.swing.JButton();
        jLblAsli = new javax.swing.JLabel();
        jLblAslinya = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Form Login");

        jLabel2.setText("Nama");

        jLabel3.setText("Password");

        jButton1.setText("Login");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLblPalsu.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        jLblPalsu.setText("Password Palsu");

        jTxtToDecrypt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTxtToDecryptActionPerformed(evt);
            }

            private void jTxtToDecryptActionPerformed(ActionEvent evt) {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
        });

        jBtnToDecrypt.setText("Decrypt");
        jBtnToDecrypt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnToDecryptActionPerformed(evt);
            }
        });

        jLblAsli.setFont(new java.awt.Font("Intan", 1, 12)); // NOI18N
        jLblAsli.setText("Hasil");

        jLblAslinya.setFont(new java.awt.Font("Intan", 1, 12)); // NOI18N
        jLblAslinya.setForeground(new java.awt.Color(51, 51, 51));
        jLblAslinya.setText("Password Asli");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(160, 160, 160)
                        .addComponent(jLabel1))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(51, 51, 51)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel3)
                            .addComponent(jLabel2))
                        .addGap(31, 31, 31)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE)
                            .addComponent(jPasswordField1)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(80, 80, 80)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLblAsli)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jTxtToDecrypt, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(jBtnToDecrypt)))))
                .addContainerGap(136, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jButton1)
                        .addGap(131, 131, 131))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLblAslinya)
                            .addComponent(jLblPalsu))
                        .addGap(31, 31, 31))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(22, 22, 22)
                .addComponent(jLabel1)
                .addGap(5, 5, 5)
                .addComponent(jLblAslinya)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLblPalsu)
                .addGap(3, 3, 3)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(25, 25, 25)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(36, 36, 36)
                .addComponent(jButton1)
                .addGap(86, 86, 86)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTxtToDecrypt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jBtnToDecrypt))
                .addGap(18, 18, 18)
                .addComponent(jLblAsli)
                .addContainerGap(71, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jBtnToDecryptActionPerformed(java.awt.event.ActionEvent evt) {                                              
 String jtxttodec = jTxtToDecrypt.getText();
        Decrypt dec = new Decrypt();
        dec.setAlsi(jtxttodec);
        jLblAsli.setText(dec.getAlsi());
          // TODO add your handling code here:
    }                                             

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
 // TODO add your handling code here:
    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(FrameLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(FrameLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(FrameLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(FrameLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FrameLogin().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jBtnToDecrypt;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLblAsli;
    private javax.swing.JLabel jLblAslinya;
    private javax.swing.JLabel jLblPalsu;
    private javax.swing.JPasswordField jPasswordField1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTxtToDecrypt;
    // End of variables declaration                   
}

6. Masukan dan sesuaikan syntax dibawah ini pada class Decrypt.java

package dec;

public class Decrypt {

    private String alsi;

    public Decrypt() {
    }

    public String getAlsi() {
        String WordKey = "LOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHA";
        String NumKey = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
        String CodeKey = "~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.";

        String toDecrypt = this.alsi;

        WordKey = WordKey.toLowerCase();
        toDecrypt = toDecrypt.toUpperCase();

        char wordArray[] = WordKey.toCharArray();
        char numArray[] = NumKey.toCharArray();
        char charArray[] = toDecrypt.toCharArray();
        char codeArray[] = CodeKey.toCharArray();

        for (int i = 0; i < toDecrypt.length(); i++) {
            if (Character.isLetter(charArray[i])) {
                if (Character.isUpperCase(charArray[i])) {
                    charArray[i] = (char) (((int) charArray[i] - 65 - ((int) wordArray[i % WordKey.length()] - 97) + 104) % 26 + 65);
                } else {
                    charArray[i] = (char) (((int) charArray[i] - 97 - ((int) wordArray[i % WordKey.length()] - 97) + 104) % 26 + 97);
                }
            } else if ((int) charArray[i] >= 48 && (int) charArray[i] < 58) {
                charArray[i] = (char) (((int) charArray[i] - 48 - ((int) numArray[i]) + 80) % 10 + 48);
            } else if ((int) charArray[i] >= 30 && (int) charArray[i] < 48) {
                charArray[i] = (char) (((int) charArray[i] - 30 - ((int) codeArray[i])) % 18 + 48);
            }
        }

        toDecrypt = new String(charArray);
        return toDecrypt;
    }

    public void setAlsi(String alsi) {
        this.alsi = alsi;
    }
}


7. juga pada class Encrypt.java, berikut syntaxnya

package enc;

import random.Random;

public class Encrypt {

    private String palsu;
    private String asli="TEST";

    public Encrypt() {
        Random rd = new Random();
        this.asli = rd.getStr();
    }

    public String getPalsu() {
        String WordKey = "LOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHA";
        String NumKey = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
        String CodeKey = "~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.";
        //String toEncrypt = "Aku kirim sejumlah Rp.17.800.100,00 \"(tujuh belas juta)\" syaratnya harus lengkap";
        String toEncrypt = this.asli;
        WordKey = WordKey.toLowerCase();
        toEncrypt = toEncrypt.toLowerCase();

        char wordArray[] = WordKey.toCharArray();
        char numArray[] = NumKey.toCharArray();
        char charArray[] = toEncrypt.toCharArray();
        char codeArray[] = CodeKey.toCharArray();

        for (int i = 0; i < toEncrypt.length(); i++) {
            if (Character.isLetter(charArray[i])) {
                if (Character.isUpperCase(charArray[i])) {
                    charArray[i] = (char) (((int) charArray[i] - 65 + ((int) wordArray[i] - 97)) % 26 + 65);
                } else {
                    charArray[i] = (char) (((int) charArray[i] - 97 + ((int) wordArray[i] - 97)) % 26 + 97);
                }
            } else if ((int) charArray[i] >= 48 && (int) charArray[i] < 58) {
                charArray[i] = (char) (((int) charArray[i] - 48 + ((int) numArray[i])) % 10 + 48);
            } else if ((int) charArray[i] >= 30 && (int) charArray[i] < 48) {
                charArray[i] = (char) (((int) charArray[i] - 30 + ((int) codeArray[i])) % 18 + 30);
            }
        }

        toEncrypt = new String(charArray);
        return toEncrypt;
    }

    public void setPalsu(String palsu) {
        this.palsu = palsu;
    }

    public String getAsli() {        
        return asli;
    }

    public void setAsli(String asli) {
        this.asli = asli;
    }

}


8. lanjutkan di OTP.java dengan memasukan dan sesuaikan syntax berikut

package otp;

import enc.Encrypt;
import gui.FrameLogin;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import random.Random;

public class OTP {

    public static void main(String[] args) {
        FrameLogin jf = new FrameLogin();
        jf.setVisible(true);
        //DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
    }

}


9. dan terakhir juga masukan syntax berikut di Random.java

package random;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Random {

    private String str;

    public String getStr() {
        //============== JANGKRIK ============================
        //int randomPin = (int) (Math.random() * 9000) + 1000;
        //str = String.valueOf(randomPin);
        //========== END OF JANGKRIK =========================
        //DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        DateFormat df = new SimpleDateFormat("ssmm");        
        Calendar cl = Calendar.getInstance();
        str = ""+df.format(cl.getTime());
        str = "9"+str+"4";
        /*
        String cr = "";
        String hs = "";
        for (int i = 0; i < str.length(); i++) {
            cr = str.substring(i, i + 1);
            int ii = Integer.parseInt(cr);
            if (ii == 0) {
                cr = "A";
            } else if (ii == 1) {
                cr = "B";
            } else if (ii == 2) {
                cr = "C";
            } else if (ii == 3) {
                cr = "D";
            } else if (ii == 4) {
                cr = "E";
            } else if (ii == 5) {
                cr = "F";
            } else if (ii == 6) {
                cr = "G";
            } else if (ii == 7) {
                cr = "H";
            } else if (ii == 8) {
                cr = "I";
            } else if (ii == 9) {
                cr = "J";
            } else {
                cr = "";
            }
            hs = hs + cr;
        } 
*/
        return str;
    }

    public void setStr(String str) {
    }
}


10. Kemudian buat project baru pada Android Studio. new project, nama applikasi, pilih empty activity, lalu Finish.

11. Masukkan syntax berikut pada activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"    
xmlns:tools="http://schemas.android.com/tools"    
xmlns:app="http://schemas.android.com/apk/res-auto"    
android:layout_width="match_parent"    
android:layout_height="match_parent"    
android:paddingLeft="16dp"    
android:paddingRight="16dp"    
android:paddingTop="16dp"    
android:paddingBottom="16dp"    
android:background="#41798b"    
tools:context=".MainActivity">

<EditTextandroid:id="@+id/edttxtpalsu"        
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:layout_centerHorizontal="true"        
android:hint="PASSWORD PALSU"        
android:layout_marginTop="50dp"        
android:textColorHint="#fff"        
android:textColor="#fff"        
android:inputType="text" />

<Button        
android:id="@+id/btnOkId"        
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:onClick="btnOkClick"        
android:layout_marginTop="30dp"        
android:layout_marginLeft="20dp"        
android:background="#000"        
android:layout_centerHorizontal="true"        
android:textColor="#fff"        
android:text="OKE"        
android:layout_below="@+id/edttxtpalsu"       
/>
<TextView        
android:id="@+id/tvPwdAsli"        
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:textColor="#fff"        
android:textSize="36sp"        
android:textStyle="bold"        
android:layout_below="@+id/edttxtpalsu"        
android:layout_marginTop="200dp"        
android:layout_centerHorizontal="true"/>
</RelativeLayout>


11. Lalu masukkan juga syntax berikut pada MainActivity.java, sesuaikan

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView tvpwdasli;
    EditText edttxtpalsu;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void btnOkClick(View view){
        tvpwdasli = (TextView ) findViewById(R.id.tvPwdAsli);
        edttxtpalsu = (EditText) findViewById(R.id.edttxtpalsu);
        String palsu = edttxtpalsu.getText().toString();
        OtpDecrypt obj = new OtpDecrypt(palsu);
        tvpwdasli.setText(obj.getPwdasli());
    }
}



12. Buat class OtpDecrypt dan masukan syntax berikut, sesuaikan.

public class OtpDecrypt {

    private String pwdasli;

    public OtpDecrypt() {
    }

    public OtpDecrypt(String pwdasli) {
        this.pwdasli = pwdasli;
    }

    public String getPwdasli() {
        String WordKey = "LOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHALOHA";
        String NumKey = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
        String CodeKey = "~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.~!@#$%^&*()-_+={}?<>/,.";

        String toDecrypt = this.pwdasli;

        WordKey = WordKey.toLowerCase();
        toDecrypt = toDecrypt.toUpperCase();

        char wordArray[] = WordKey.toCharArray();
        char numArray[] = NumKey.toCharArray();
        char charArray[] = toDecrypt.toCharArray();
        char codeArray[] = CodeKey.toCharArray();

        for (int i = 0; i < toDecrypt.length(); i++) {
            if (Character.isLetter(charArray[i])) {
                if (Character.isUpperCase(charArray[i])) {
                    charArray[i] = (char) (((int) charArray[i] - 65 - ((int) wordArray[i % WordKey.length()] - 97) + 104) % 26 + 65);
                } else {
                    charArray[i] = (char) (((int) charArray[i] - 97 - ((int) wordArray[i % WordKey.length()] - 97) + 104) % 26 + 97);
                }
            } else if ((int) charArray[i] >= 48 && (int) charArray[i] < 58) {
                charArray[i] = (char) (((int) charArray[i] - 48 - ((int) numArray[i]) + 80) % 10 + 48);
            } else if ((int) charArray[i] >= 30 && (int) charArray[i] < 48) {
                charArray[i] = (char) (((int) charArray[i] - 30 - ((int) codeArray[i])) % 18 + 48);
            }
        }

        toDecrypt = new String(charArray);
        return toDecrypt;

    }

    public void setPwdasli(String pwdasli) {
        this.pwdasli = pwdasli;
    }
}


13. Hasil Ranningan Project OTP di Android Studio



14. Cara menjalankannya:
- Masukkan password palsu di android yang tertera di komputer, klik OKE, 
- Setelah itu akan muncul password asli, lalu masukkan pada kotak untuk mendecrypt, 
- Lalu klik button decrypt, password akan di decrypt dan akan memunculkan password dummy (tipuan), 
- Terakhir masukkan username dan password yang sudah di decrypt, klik LOGIN. seperti pada gambar dibawah ini





Tidak ada komentar:

Posting Komentar