Sie sind auf Seite 1von 16

A-

LISTING PROGRAM

GenerateKey.java

package com.example.kygoo.schnorrdigitalsignature;

import android.app.Dialog;
import android.content.Context;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.kygoo.schnorrdigitalsignature.algoritma.AKS;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.math.BigInteger;

public class GenerateKey extends AppCompatActivity {

Button btn_generate;
Button btn_simpan;
EditText txt_p;
EditText txt_q;
EditText txt_a;
EditText txt_y;
EditText txt_d;
EditText txt_save;
TextView txt_waktu;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.generate_key);

btn_generate = (Button) findViewById(R.id.btn_Generate);


btn_simpan = (Button) findViewById(R.id.btn_Simpan);

txt_p = (EditText) findViewById(R.id.txt_P);


txt_q = (EditText) findViewById(R.id.txt_Q);
txt_a = (EditText) findViewById(R.id.txt_A);
txt_y = (EditText) findViewById(R.id.txt_Y);
txt_d = (EditText) findViewById(R.id.txt_D);
txt_save = (EditText) findViewById(R.id.txt_Save);

txt_waktu = (TextView) findViewById(R.id.txt_Waktu);

btn_generate.setOnClickListener(new View.OnClickListener() {
A-
2

@Override
public void onClick(View v) {
final long startTime = System.nanoTime();
String number = "1";
BigInteger numb = new BigInteger(number);
AKS aks = new AKS(numb);
//Log.d("aks",String.valueOf(aks.checkIsPrime(numb)));
//public key "p"
BigInteger p=BigInteger.valueOf(0);
BigInteger nilai=BigInteger.valueOf(0);
BigInteger q=BigInteger.valueOf(0);
BigInteger qp=BigInteger.valueOf(0);

SecureRandom sr = new SecureRandom();


int blp,blq;
blp = 20;
blq =10;
do {
q = new BigInteger(blq, sr);
}while (!aks.checkIsPrime(q));
System.out.println("q = "+q);

int i=0;
qp = new BigInteger(blp-blq,sr);
do {
p =
q.multiply(qp).multiply(BigInteger.valueOf(2)).add(BigInteger.ONE);
if (aks.checkIsPrime(p)) break;
qp = qp.nextProbablePrime();
i++;
} while (true);
System.out.println("loop = "+i);
System.out.println("p = "+p);

i=0;
nilai=p;
txt_p.setText(nilai.toString());
txt_q.setText(q.toString());

//public key "a"


BigInteger a = BigInteger.valueOf(0);
int loop=0;
do {
BigInteger b = BigInteger.valueOf((int)(Math.random() *
nilai.longValue()-1));
//a=b^(p-1/q) mod p
// dan a != 1
// int pangkat = (b ^ ((nilai.intValue() - 1) /
q.intValue()));
//Log.d("b",b.toString());
a =
b.modPow(((nilai.subtract(BigInteger.ONE)).divide(q)),nilai);
//Log.d("nilai a",a.toString());
loop++;
}while (a.equals(BigInteger.ONE));
txt_a.setText(a+"");

//private key
long n = 2 + (int) (Math.random() * nilai.longValue()-2) ;
BigInteger privatkey;
A-
3

privatkey = BigInteger.valueOf(n);
txt_d.setText(privatkey.toString());

//public key "y"


BigInteger y = a.modPow(privatkey, nilai); //y=a^d mod p
txt_y.setText(y.toString());

final long duration = System.nanoTime() - startTime;


String time = Long.toString(duration);
txt_waktu.setText("Running time : "+time+" ns");

}
});

btn_simpan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String Kunci ="";
//String namafile = "";
//txt_save.setText(namafile);

Kunci=txt_p.getText()+"#"+txt_q.getText()+"#"+txt_a.getText()+"#"+txt_y.getTe
xt()+"#"+txt_d.getText();

writeToFile(getApplicationContext(),txt_save.getText().toString(),Kunci);
}
});
}

public void writeToFile(Context context, String sFileName, String


sBody) {
try {
File root = new File(Environment.getExternalStorageDirectory(),
"Kunci");
if (!root.exists()) {
root.mkdirs();
}
File gpxfile = new File(root, sFileName);
FileWriter writer = new FileWriter(gpxfile);
writer.append(sBody);
writer.flush();
writer.close();
Toast.makeText(context, "Saved", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
}

AKS.java

package com.example.kygoo.schnorrdigitalsignature.algoritma;

/**
A-
4

* Created by kygoo on 5/23/2017.


*/

import java.math.*;
import java.io.*;
/***************************************************************************
* Team
**************
* Arijit Banerjee
* Suchit Maindola
* Srikanth Manikarnike
*
**************
* This is am implementation of Agrawal–Kayal–Saxena primality test in java.
*
**************
* The algorithm is -
* 1. l <- log n
* 2. for i<-2 to l
* a. if an is a power fo l
* return COMPOSITE
* 3. r <- 2
* 4. while r < n
* a. if gcd( r, n) != 1
* return COMPSITE
* b. if sieve marked n as PRIME
* q <- largest factor (r-1)
* o < - r-1 / q
* k <- 4*sqrt(r) * l
* if q > k and n <= r
* return PRIME
* c. x = 2
* d. for a <- 1 to k
* if (x + a) ^n != x^n + mod (x^r - 1, n)
* return COMPOSITE
* e. return PRIME
*/

public class AKS


{
private int log;
private boolean sieveArray[];
private int SIEVE_ERATOS_SIZE = 10000;

/* aks constructor */
public AKS(BigInteger input)
{
sieveEratos();

boolean result = checkIsPrime(input);

if( result)
{
System.out.println("1");
}
else
{
System.out.println("0");
}
}

/* function to check if a given number is prime or not */


A-
5

public boolean checkIsPrime(BigInteger n)


{
BigInteger lowR, powOf, x, leftH, rightH, fm, aBigNum;
int totR, quot, tm, aCounter, aLimit, divisor;
log = (int) logBigNum(n);
if( findPower(n,log) )
{
return false;
}
lowR = new BigInteger("2");
x = lowR;
totR = lowR.intValue();
for( lowR = new BigInteger("2");
lowR.compareTo(n) < 0;
lowR = lowR.add(BigInteger.ONE))
{
if( (lowR.gcd(n)).compareTo(BigInteger.ONE) != 0 )
{
return false;
}
totR = lowR.intValue();
if( checkIsSievePrime(totR) )
{
quot = largestFactor(totR - 1);
divisor = (int) (totR - 1) / quot;
tm = (int) (4 * (Math.sqrt(totR)) * log);
powOf = mPower(n, new BigInteger("" + divisor), lowR);
if( quot >= tm && (powOf.compareTo(BigInteger.ONE)) != 0 )
{
break;
}
}
}
fm = (mPower(x, lowR, n)).subtract(BigInteger.ONE);
aLimit = (int) (2 * Math.sqrt(totR) * log);
for(aCounter = 1; aCounter < aLimit; aCounter++)
{
aBigNum = new BigInteger("" + aCounter);
leftH = (mPower(x.subtract(aBigNum), n, n)).mod(n);
rightH = (mPower(x, n, n).subtract(aBigNum)).mod(n);
if(leftH.compareTo(rightH) != 0) return false;
}
return true;
}
/* function that computes the log of a big number*/
public double logBigNum(BigInteger bNum)
{
String str;
int len;
double num1, num2;
str = "." + bNum.toString();
len = str.length() - 1;
num1 = Double.parseDouble(str);
num2 = Math.log10(num1) + len;
return num2;
}

/*function that computes the log of a big number input in string format*/
public double logBigNum(String str)
{
String s;
int len;
A-
6

double num1, num2;


len = str.length();
s = "." + str;
num1 = Double.parseDouble(s);
num2 = Math.log10(num1) + len;
return num2;
}

/* function to compute the largest factor of a number */


public int largestFactor(int num)
{
int i;
i = num;
if(i == 1) return i;
while(i > 1)
{
while( sieveArray[i] == true )
{
i--;
}
if(num % i == 0)
{
return i;
}
i--;
}
return num;
}

/*function given a and b, computes if a is power of b */


public boolean findPowerOf(BigInteger bNum, int val)
{
int l;
double len;
BigInteger low, high, mid, res;
low = new BigInteger("10");
high = new BigInteger("10");
len = (bNum.toString().length()) / val;
l = (int) Math.ceil(len);
low = low.pow(l - 1);
high = high.pow(l).subtract(BigInteger.ONE);
while(low.compareTo(high) <= 0)
{
mid = low.add(high);
mid = mid.divide(new BigInteger("2"));
res = mid.pow(val);
if(res.compareTo(bNum) < 0)
{
low = mid.add(BigInteger.ONE);
}
else if(res.compareTo(bNum) > 0)
{
high = mid.subtract(BigInteger.ONE);
}
else if(res.compareTo(bNum) == 0)
{
return true;
}
}
return false;
}
A-
7

/* creates a sieve array that maintains a table for COMPOSITE-ness


* or possibly PRIME state for all values less than SIEVE_ERATOS_SIZE
*/
public boolean checkIsSievePrime(int val)
{
if(sieveArray[val] == false)
{
return true;
}
else
{
return false;
}
}

long mPower(long x, long y, long n)


{
long m, p, z;
m = y;
p = 1;
z = x;
while(m > 0)
{
while(m % 2 == 0)
{
m = (long) m / 2;
z = (z * z) % n;
}
m = m - 1;
p = (p * z) % n;
}
return p;
}

/* function, given a and b computes if a is a power of b */


boolean findPower(BigInteger n, int l)
{
int i;
for(i = 2; i < l; i++)
{
if(findPowerOf(n, i))
{
return true;
}
}
return false;
}

BigInteger mPower(BigInteger x, BigInteger y, BigInteger n)


{
BigInteger m, p, z, two;
m = y;
p = BigInteger.ONE;
z = x;
two = new BigInteger("2");
while(m.compareTo(BigInteger.ZERO) > 0)
{
while( ( (m.mod(two)).compareTo(BigInteger.ZERO) ) == 0)
{
m = m.divide(two);
z = (z.multiply(z)).mod(n);
A-
8

}
m = m.subtract(BigInteger.ONE);
p = (p.multiply(z)).mod(n);
}
return p;
}

public void sieveEratos()


{
int i, j;
sieveArray = new boolean[SIEVE_ERATOS_SIZE+1];
sieveArray[1] = true;
for(i = 2; i * i <= SIEVE_ERATOS_SIZE; i++)
{
if(sieveArray[i] != true)
{
for(j = i * i; j <= SIEVE_ERATOS_SIZE; j += i)
{
sieveArray[j] = true;
}
}
}
}

Bacafile.java

package com.example.kygoo.schnorrdigitalsignature.algoritma;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
* Created by kygoo on 6/6/2017.
*/

public class bacafile extends Activity{

public void openFolder(){


File file = new File(Environment.getExternalStorageDirectory(),
A-
9

"fileasal");

Log.d("path", file.toString());

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);


intent.setDataAndType(Uri.fromFile(file), "*/*");
startActivity(intent);
}
public static String BacaPlain(String directory){

String baca = "";

File file = new File(directory);


FileInputStream fis = null;

try {
fis = new FileInputStream(file);

System.out.println("Total file size to read (in bytes) : "


+ fis.available());

int content;
while ((content = fis.read()) != -1) {
// convert to char and display it
baca += String.valueOf((char) content);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null)
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return baca;
}

Hash.java

package com.example.kygoo.schnorrdigitalsignature.algoritma;

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;

/**
* Created by kygoo on 6/6/2017.
*/

public class Hash {


public static byte[] hashsignature(String pesan, String key)
{
byte[] sha1 = null;
A-
10

try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(pesan.getBytes());
crypt.update(key.getBytes());
sha1 = crypt.digest();
}
catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}
return sha1;
}

//private static String byteToHex(final byte[] hash)


/*{
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}*/
}

Sign.java

package com.example.kygoo.schnorrdigitalsignature;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.kygoo.schnorrdigitalsignature.algoritma.Hash;
import com.example.kygoo.schnorrdigitalsignature.algoritma.bacafile;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;

public class Sign extends AppCompatActivity {

Button btn_import;
Button btn_load;
Button btn_sign;
Button btn_simpan;
A-
11

EditText txt_input;
EditText txt_p;
EditText txt_q;
EditText txt_a;
EditText txt_y;
EditText txt_d;
EditText txt_e;
EditText txt_s;
EditText txt_save;
TextView txt_waktu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sign);

btn_import = (Button) findViewById(R.id.btn_Import);


btn_load = (Button) findViewById(R.id.btn_Load);
btn_sign = (Button) findViewById(R.id.btn_Sign);
btn_simpan = (Button) findViewById(R.id.btn_Simpan);
txt_input = (EditText) findViewById(R.id.txt_Input);
txt_p = (EditText) findViewById(R.id.txt_P);
txt_q = (EditText) findViewById(R.id.txt_Q);
txt_a = (EditText) findViewById(R.id.txt_A);
txt_y = (EditText) findViewById(R.id.txt_Y);
txt_d = (EditText) findViewById(R.id.txt_D);
txt_e = (EditText) findViewById(R.id.txt_E);
txt_s = (EditText) findViewById(R.id.txt_S);
txt_save = (EditText) findViewById(R.id.txt_Save);

txt_waktu = (TextView) findViewById(R.id.txt_Waktu);

//baca file
btn_import.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

String input = "";


openFolder();
txt_input.setText(input);
}
});

btn_load.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

//String input = "";


openkunci();

});

btn_sign.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final long startTime = System.nanoTime();
//deklarasi variabel
if
(txt_p.getText().toString()==""||txt_q.getText().toString()==""){
Toast.makeText(getApplicationContext(), "inputan tidak
A-
12

valid", Toast.LENGTH_SHORT).show();
}else{
BigInteger k, r, s, e, p, q, a, d;
p = new BigInteger(txt_p.getText().toString());
q = new BigInteger(txt_q.getText().toString());
a = new BigInteger(txt_a.getText().toString());
d = new BigInteger(txt_d.getText().toString());
k =new BigInteger(String.valueOf(1 + (int) (Math.random() *
q.intValue())));//random bilangan 1<k<q-1
//String nu = "143";
//BigInteger key = new BigInteger(nu);

r = a.modPow(k, p); //r=a^k mod p


String pesan = txt_input.getText().toString();
//Log.d("nilai r",r.toString());

//e=h(m,r);
byte [] sha1 = Hash.hashsignature(pesan,r.toString()); //key
diganti r
txt_e.setText(new BigInteger(1,sha1).toString());

//ttd
e = new BigInteger(1, sha1);
s = (k.add(d.multiply(e))).mod(q);// s=(k+d x e).mod q;
txt_s.setText(s.toString());
}
final long duration = System.nanoTime() - startTime;
String time = Long.toString(duration);
txt_waktu.setText("Running time : "+time+" ns");
}
});

btn_simpan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String ttd ="";
//String namafile = "";
//txt_save.setText(namafile);
ttd=txt_e.getText()+"#"+txt_s.getText();

writeToFile(getApplicationContext(),txt_save.getText().toString(),ttd);
}
});

public void openFolder(){


Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri =
Uri.parse(Environment.getExternalStorageDirectory().getPath());
intent.setDataAndType(uri, "text/plain");
startActivityForResult(Intent.createChooser(intent, "Open
folder"),1);
}

public void openkunci(){


Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri =
A-
13

Uri.parse(Environment.getExternalStorageDirectory().getPath());
intent.setDataAndType(uri, "text/plain");
startActivityForResult(Intent.createChooser(intent, "Open folder"),2);
}

protected void onActivityResult(int req, int res, Intent data) {

super.onActivityResult(req, res, data);

if (req == 1) {
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
txt_input.setText(baca);
} else {
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
String[] kunci = baca.split("#");
txt_p.setText(kunci[0]);
txt_q.setText(kunci[1]);
txt_a.setText(kunci[2]);
txt_y.setText(kunci[3]);
txt_d.setText(kunci[4]);

}
}

public void writeToFile(Context context, String sFileName, String sBody)


{
try {
File root = new File(Environment.getExternalStorageDirectory(),
"ttd");
if (!root.exists()) {
root.mkdirs();
}
File gpxfile = new File(root, sFileName);
FileWriter writer = new FileWriter(gpxfile);
writer.append(sBody);
writer.flush();
writer.close();
Toast.makeText(context, "Saved", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Verify.java

package com.example.kygoo.schnorrdigitalsignature;

import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
A-
14

import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.kygoo.schnorrdigitalsignature.algoritma.Hash;
import com.example.kygoo.schnorrdigitalsignature.algoritma.bacafile;

import java.math.BigInteger;

public class Verify extends AppCompatActivity {

Button btn_import;
Button btn_load;
Button btn_loadsign;
Button btn_verifikasi;
EditText txt_input;
EditText txt_p;
EditText txt_q;
EditText txt_a;
EditText txt_y;
EditText txt_d;
EditText txt_e;
EditText txt_s;
TextView txt_waktu;
TextView txt_status;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.verify);

btn_import = (Button) findViewById(R.id.btn_Import);


btn_load = (Button) findViewById(R.id.btn_Load);
btn_loadsign = (Button) findViewById(R.id.btn_LoadSign);
btn_verifikasi = (Button) findViewById(R.id.btn_Verifikasi);
txt_input = (EditText) findViewById(R.id.txt_Input);
txt_p = (EditText) findViewById(R.id.txt_P);
txt_q = (EditText) findViewById(R.id.txt_Q);
txt_a = (EditText) findViewById(R.id.txt_A);
txt_y = (EditText) findViewById(R.id.txt_Y);
txt_d = (EditText) findViewById(R.id.txt_D);
txt_e = (EditText) findViewById(R.id.txt_E);
txt_s = (EditText) findViewById(R.id.txt_S);

txt_waktu = (TextView) findViewById(R.id.txt_Waktu);


txt_status = (TextView) findViewById(R.id.txt_Status);

//baca file
btn_import.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

String input = "";


openFolder();
txt_input.setText(input);
}
});

btn_load.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
openkunci();

}
A-
15

});

btn_loadsign.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
opensign();
}
});

btn_verifikasi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final long startTime = System.nanoTime();
//deklarasi variabel
BigInteger s, e, p, q, a, y, d, as, ye, ye2, ve, e1;
p = new BigInteger(txt_p.getText().toString());
q = new BigInteger(txt_q.getText().toString());
a = new BigInteger(txt_a.getText().toString());
y = new BigInteger(txt_y.getText().toString());
d = new BigInteger(txt_d.getText().toString());
s = new BigInteger(txt_s.getText().toString());
e = new BigInteger(txt_e.getText().toString());

//pencarian v = a^s x y^-e mod p


//v = ((a^s mod p) x (y^-e mod p)) mod p
//v = ((a^s mod p) x ((y^-1 mod p)^e mod p)) mod p
as = a.modPow(s, p); //as=a^s mod p //buat variabel as
ye = y.modInverse(p);
ye2 = ye.modPow(e, p);
//ye2 = y.modPow(e, p); //tes
ve = as.multiply(ye2).mod(p);
Log.d("nilai ve",ve.toString());

String pesan = txt_input.getText().toString();


byte [] sha1 = Hash.hashsignature(pesan,ve.toString());
//e'=h(m,v)

//bandingkan nilai e = e'


e1 = new BigInteger(1,sha1);
if (e.toString().equals(e1.toString())){
txt_status.setText("status : Valid");
//Toast.makeText(getApplicationContext(), "valid",
Toast.LENGTH_SHORT).show();
}else{
txt_status.setText("status : Invalid");
//Toast.makeText(getApplicationContext(), "invalid",
Toast.LENGTH_SHORT).show();
}
final long duration = System.nanoTime() - startTime;
String time = Long.toString(duration);
txt_waktu.setText("Running time : "+time+" ns");
}
});

public void openFolder(){


Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri =
A-
16

Uri.parse(Environment.getExternalStorageDirectory().getPath());
intent.setDataAndType(uri, "text/plain");
startActivityForResult(Intent.createChooser(intent, "Open folder"),1);
}

public void openkunci(){


Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri =
Uri.parse(Environment.getExternalStorageDirectory().getPath());
intent.setDataAndType(uri, "text/plain");
startActivityForResult(Intent.createChooser(intent, "Open folder"),2);
}

public void opensign(){


Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri =
Uri.parse(Environment.getExternalStorageDirectory().getPath());
intent.setDataAndType(uri, "text/plain");
startActivityForResult(Intent.createChooser(intent, "Open folder"),3);
}

protected void onActivityResult(int req, int res, Intent data) {

super.onActivityResult(req, res, data);

if (req == 1) {
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
txt_input.setText(baca);
}else if (req == 3){
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
String[] sign = baca.split("#");
txt_e.setText(sign[0]);
txt_s.setText(sign[1]);
}else
{
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
String[] kunci = baca.split("#");
txt_p.setText(kunci[0]);
txt_q.setText(kunci[1]);
txt_a.setText(kunci[2]);
txt_y.setText(kunci[3]);
txt_d.setText(kunci[4]);

}
}
}

Das könnte Ihnen auch gefallen