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
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







