Cài đặt hệ thống

Một phần của tài liệu Nghiên cứu giải pháp bảo mật mạng 3G (Trang 54)

Để triển khai mô hình, hệ thống bao gồm các thành phần:

 Hai thiết bị di động (điện thoại) cài đặt chƣơng trình và một máy tính cài SIP server.

 Sử dụng một FTP Server để phân phối khóa công khai của ngƣời dùng.

 Kết nối vật lý LAN, Internet...

3.5.8.1. Cài đặt máy chủ SIP

Cài đặt máy chủ SIP sử dụng phần mềm OfficeSIP Server (tải về tại http://www.officesip.com), giao diện nhƣ hình . Khi có một kết nối thành công tới tài khoản SIP, biểu tƣợng kết nối sẽ đƣợc chuyển sang màu xanh.

Hình 3.14. Quản lý tài khoản SIP trong OfficeSIP

Chƣơng trình sử dụng một máy chủ FTP để lƣu trữ tệp khóa công khai dùng chung cho tất cả ngƣời dùng. Mỗi ngƣời dùng sẽ đƣợc cấp tài khoản mặc định và quyền đọc và ghi tệp trên máy chủ.

Tệp khóa công khai đƣợc xây dựng theo định dạng XML (Ngôn ngữ đánh dấu mở rộng), mỗi khi chƣơng trình khởi tạo khóa, sẽ thực hiện thêm (hoặc sửa) vào tệp.

Hình 3.15. Đăng nhập vào máy chủ FTP với tài khoản đƣợc cấp

3.5.8.3. Cài đặt chương trình

Chƣơng trình ứng dụng đƣợc cài đặt thử nghiệm trên Emulator của Android

 Khi chƣơng trình ứng dụng đƣợc mở, ngƣời sử dụng nhập thông tin tài khoản SIP trong phần cấu hình.

 Nếu tài khoản đúng, một kết nối sẽ đƣợc thực hiện tới máy chủ SIP, biểu tƣợng kết nối sẽ chuyển sang màu xanh.

Hình 3.17. Kết quả việc kết nối tài khoản với máy chủ SIP thành công

a) Chức năng trao đổi khóa

Khi kết nối thành công, ngƣời dùng có thể thực hiện cuộc gọi, khi kết nối đƣợc tới ngƣời nhận cuộc gọi, khóa công khai của ngƣời gọi và ngƣời nhận đƣợc trao đổi với nhau.

Ví dụ:

- Ngƣời gọi có số 5554 gọi sẽ thực hiện cuộc gọi tới ngƣời nhận số 5556 bằng cách nhập thông tin tài khoản ngƣời gọi.

Hình 3.18. Nhập thông tin tài khoản ngƣời nhận

- Tiến hành thực hiện cuộc gọi tới tài khoản 5556

Hình 3.19. Ngƣời có tài khoản 5554 thực hiện cuộc gọi

- Hai bên thực hiện cuộc gọi

Hình 3.20. Hai bên thực hiện cuộc gọi

- Nội dung cuộc gọi sẽ đƣợc mã hóa bằng khóa công khai của ngƣời đàm thoại với mình.

Hình 3.21. Hai bên sử dụng khóa công khai của nhau để mã hóa thông tin

- Truy cập vào máy chủ TFP với tài khoản đƣợc cấp ta có thể xem nội dung file

user.xml lƣu khóa công khai dùng chung cho tất cả ngƣời dùng.

Hình 3.22. Nội dung tệp user.xml lƣu khóa công khai của các tài khoản

b) Chức năng mã hóa, giải mã dữ liệu dạng văn bản (text)

Khi kết nối thành công, ngƣời gọi và ngƣời nhận có thể trao đổi với nhau dữ liệu dạng văn bản (text), dữ liệu ngƣời gửi đƣợc mã hóa và lƣu lên tệp 5554.txt. Ngƣời nhận thực hiện đọc dữ liệu từ tệp 5554.txt giải mã.

Hình 3.23. Minh họa việc mã hóa và giải mã dữ liệu dạng văn bản

- Xem nội dung file 5554.txt lƣu nội dung văn bản đã đƣợc mã hóa.

Hình 3.24. Nội dung văn bản đƣợc mã hóa trong tệp 5554.txt 3.6. Kết luận

Chƣơng 3 đã trình bày tổng quan về vấn đề bảo mật trong mạng di động 3G trên thế giới. Giới thiệu khái quát tình hình triển khai mạng 3G tại Việt Nam. Phân tích nguy cơ mất an ninh an toàn trong mạng và lựa chọn giải pháp bảo mật trên tầng ứng dụng trong mạng thông tin 3G. Phần cuối chƣơng 3, tác giả trình bày các chức năng chính của hệ thống bảo mật, các thuật toán tƣơng ứng và cách thức cài đặt hệ thống, minh họa các chức năng chính của phần mềm bảo mật thoại.

KẾT LUẬN

Trong quá trình thực hiện đề tài, tác giả đã tiếp thu đƣợc những kiến thức cơ bản về công nghệ 3G, các kiến thức liên quan đến vấn đề bảo mật thông tin, về các đe dọa, tấn công mạng, các hàm, thuật toán đƣợc sử dụng để mã hóa và toàn vẹn thông tin, đặc biệt là bảo mật trong mạng 3G. Chỉ ra đƣợc những nguy cơ gây mất an toàn thông tin di động sử dụng công nghệ 3G. Từ đó thấy rằng, việc thực hiện bảo mật thông tin mạng điện thoại di động 3G là rất cần thiết đặc biệt là nhu cầu bảo mật thông tin cá nhân ngƣời sử dụng.

+ Những điểm đạt đƣợc của luận văn là:

- Trình bày tổng quát về công nghệ 3G, kiến trúc mạng 3G. Tổng quát hóa những vấn đề chung về an toàn vào bảo mật thông tin trong mạng di động 3G.

- Tổng hợp các phƣơng pháp mã hóa thông tin, ƣu nhƣợc điểm khi sử dụng các phƣơng pháp mã hóa khác nhau. Đi sâu vào nghiên cứu lý thuyết hệ mật đƣờng cong Eliptic và ứng dụng ECC vào việc mã hóa dữ liệu, trao đổi khóa, là cơ sở cho việc lựa chọn phƣơng pháp mã hóa và bảo mật thông tin di động 3G.

- Nghiên cứu hiện trạng mạng thông tin 3G tại Việt Nam, thực trạng và nguy cơ mất an toàn trong mạng 3G, việc tác giả lựa chọn và nghiên cứu nền tảng công nghệ lập trình ứng dụng trên hệ điều hành Android là một khâu rất quan trọng trong việc xây dựng phần mềm bảo mật thoại.

+ Những điểm tồn tại của luận văn là:

- Phần thực hiện sản phẩm phần mềm mới dừng lại ở việc mô phỏng trên máy ảo quá trình trao đổi khóa giữa hai ngƣời gọi, quá trình mã hóa và giải mã thông tin khi hai ngƣời gọi liên lạc với nhau.

- Tuy nhiên các vấn đề mà luận văn đề cập trên lĩnh vực tƣơng đối rộng, mặc dù đã nỗ lực hết sức, cố gắng vận dụng kiến thức, mọi khả năng, mọi điều kiện, nội dung luận văn chắc chắn còn nhiều thiếu sót và hạn chế. Rất mong nhận đƣợc những góp ý quý báu của các thầy cô giáo, các đồng nghiệp để luận văn đƣợc hoàn thiện hơn.

HƢỚNG PHÁT TRIỂN ĐỀ TÀI

Triển khai nghiên cứu xây dựng ứng dụng bảo mật trên mạng di động 3G nhƣ call video, tích hợp PKI trên thiết bị di động, xây dựng ứng dụng trên một số hệ điều hành di động khác nhƣ Windows Phone...

Cần tiếp tục nghiên cứu để làm rõ hơn các giải pháp bảo đảm an toàn và bảo mật cho hệ thống thông tin di động 3G, trên cơ sở đó phát triển các hệ thống thực tế.

TÀI LIỆU THAM KHẢO Tiếng Việt

1. Trƣờng Đại học Hàng Hải (2008), Giáo trình An toàn và Bảo mật thông tin, Hải

Phòng, tr.4-5,

2. Nguyễn Tiến Ban (2007), Kỹ thuật viễn thông, Học viện công nghệ Bƣu chính viễn thông Hà Nội, tr.93-96.

3. Nguyễn Phạm Anh Dũng (2009), Bài giảng giới thiệu công nghệ 3G WCDMA UMTS, Học viện Công nghệ Bƣu chính Viễn thông Hà Nội, tr.7-10,11-17.

4. Trần Văn Dũng (2007), Giáo trình An toàn và Bảo mật thông tin, Đại học Giao

thông vận tải Hà Nội, tr.14-24, 77-79, 94-96.

5.Phan Thị Thu Hiền (2006), Hệ mật đƣờng cong elliptic, đồ án tốt nghiệp đại học, Trƣờng Đại học Dân lập Hải Phòng, tr.15-17.

6. Nguyễn Thị Tuyết Mai (2012), Nghiên cứu các giải pháp an toàn bảo mật cho hệ

thống mạng lõi của 3G và ứng dụng cho Vinaphone , luận văn thạc sĩ, Học viện

Công Nghệ BCVT, Hà Nội, tr.28-31.

7. Phạm Văn Quỳnh (2010), An ninh trong 3G UMTS, đồ án tốt nghiệp đại học, Học

viện công nghệ Bƣu chính viễn thông Hà Nội, tr.4.

8. Trần Minh Triết (2005), Thuật toán và mã hóa ứng dụng, Trƣờng Đại học Khoa học Tự nhiên, Đại học Quốc gia thành phố Hồ Chí Minh, tr16-17, 21-23, 198-200, 213- 216.

9. Vũ Anh Tuấn (2009), Giải pháp nâng cao độ an ninh thông tin trong mạng LAN không dây chuẩn IEEE 802.11ii, luận văn thạc sĩ, Đại học Thái Nguyên, tr.18-22, 25-26.

10. Nguyễn Khanh Văn (2000), Mật mã và An toàn Thông tin, Đại học Bách khoa Hà Nội, tr.7-12.

Tiếng Anh

11. Keiji Tachikwa (2002), W-CDMA Mobile Communications System, John Wiley & Sons LTD, pp.28-31, 245-250

12. Prentice Hall (1998), Cryptography and Network Security Principles and Practice, pp.165-170, 400-416.

13. Wiley(2005) UMTS Networks Architecture Mobility and Services, pp.22-27, 59- 63, 207-211,294-297.

14.http://vinaphone.com.vn/news/16625/-Thang-10-ra-mat-cac-dich-vu-dien- thoai-di-dong-3G-dau-tien-tai-Viet-Nam

15. http://xahoithongtin.com.vn/20090814085239480p0c112/mobifone-se-cung- cap-dich-vu-3g-vao-thang-122009.htm

16. http://vnn.vietnamnet.vn/cntt/2009/04/840952/ 17. http://mobifone3g.com.vn/index.aspx?s=NDETAIL&AID=155&pages=2 18.http://www.pcworld.com.vn/articles/kinh-doanh/an-toan-thong- tin/2010/09/1220868/bao-mat-tren-mang-3g/ 19. http://voer.edu.vn/module/khoa-hoc-va-cong-nghe/bo-giao-thuc-rtp/rtcp.html 20.http://sandbox.yoyogames.com/extras/user/cv/san2/170/326170/T%C3%AC m_hi%E1%BB%83u_v%E1%BB%81_giao_th%E1%BB%A9c_SIP.doc

PHỤ LỤC. MÃ NGUỒN MỘT SỐ MODULE CHÍNH TRONG CHƢƠNG TRÌNH

... Định nghĩa đường cong Eliptic ...

package taovb.ecc.elliptic;

import java.io.*;

import java.math.BigInteger;

publicclass EllipticCurve {

private BigInteger a, b, p, order; private ECPoint generator; private BigInteger ppodbf; privateint pointcmpsize; private String name;

publicstaticfinal BigInteger COEFA = new BigInteger("4"); publicstaticfinal BigInteger COEFB = new BigInteger("27"); publicstaticfinalintPRIMESECURITY = 500;

public EllipticCurve(BigInteger a, BigInteger b, BigInteger p) throws InsecureCurveException {

this.a = a;

this.b = b;

this.p = p;

if (!p.isProbablePrime(PRIMESECURITY)) { }

if (isSingular()) thrownew

InsecureCurveException(InsecureCurveException.SINGULAR, this);

byte[] pb = p.toByteArray();

if(pb[0] == 0) pointcmpsize = pb.length;

else pointcmpsize = pb.length + 1; name = "";

}

public EllipticCurve(ECParameters ecp) throws InsecureCurveException {

this(ecp.a(),ecp.b(),ecp.p()); order = ecp.order();

name = ecp.toString();

try{

generator = new ECPoint(this, ecp.generatorX(), ecp.generatorY()); generator.fastCache();

}

catch (NotOnMotherException e){

System.out.println("Error defining EllipticCurve: generator not on mother!"); }

}

publicvoid writeCurve(DataOutputStream output) throws IOException {

byte[] ab = a.toByteArray(); output.writeInt(ab.length); output.write(ab); byte[] bb = b.toByteArray(); output.writeInt(bb.length); output.write(bb); byte[] pb = p.toByteArray(); output.writeInt(pb.length); output.write(pb); byte[] ob = order.toByteArray(); output.writeInt(ob.length); output.write(ob);

byte[] gb = generator.compress(); output.writeInt(gb.length); output.write(gb); byte[] ppb = getPPODBF().toByteArray(); output.writeInt(ppb.length); output.write(ppb); output.writeInt(pointcmpsize); output.writeUTF(name); }

protected EllipticCurve(DataInputStream input) throws IOException {

byte[] ab = newbyte[input.readInt()]; input.read(ab);

a = new BigInteger(ab);

byte[] bb = newbyte[input.readInt()]; input.read(bb);

b = new BigInteger(bb);

byte[] pb = newbyte[input.readInt()]; input.read(pb);

p = new BigInteger(pb);

byte[] ob = newbyte[input.readInt()]; input.read(ob);

order = new BigInteger(ob);

byte[] gb = newbyte[input.readInt()]; input.read(gb);

generator = new ECPoint(gb, this);

byte[] ppb = newbyte[input.readInt()]; input.read(ppb);

ppodbf = new BigInteger(ppb); pointcmpsize = input.readInt(); name = input.readUTF(); generator.fastCache(); }

publicboolean isSingular(){

BigInteger aa = a.pow(3); BigInteger bb = b.pow(2);

BigInteger result = ((aa.multiply(COEFA)).add(bb.multiply(COEFB) ) ).mod(p);

if ( result.compareTo(BigInteger.ZERO) == 0 )

returntrue;

else

returnfalse; }

public BigInteger calculateOrder(){ returnnull;

}

public ECPoint calculateGenerator(){ returnnull;

}

publicboolean onCurve(ECPoint q){

if (q.isZero())

returntrue;

BigInteger y_square = (q.gety()).modPow(new BigInteger("2"),p); BigInteger x_cube = (q.getx()).modPow(new BigInteger("3"),p); BigInteger x = q.getx();

BigInteger dum = ((x_cube.add(a.multiply(x))).add(b)).mod(p);

if (y_square.compareTo(dum) == 0) returntrue;

}

public BigInteger getOrder(){ return order;

}

public ECPoint getZero(){ returnnew ECPoint(this); }

public BigInteger geta(){ return a;

}

public BigInteger getb(){ return b;

}

public BigInteger getp(){ return p;

}

publicint getPCS() { return pointcmpsize; }

public ECPoint getGenerator(){ return generator;

}

public String toString(){

if (name == null)

return "y^2 = x^3 + " + a + "x + " + b + " ( mod " + p + " )";

elseif (name.equals(""))

return "y^2 = x^3 + " + a + "x + " + b + " ( mod " + p + " )";

elsereturn name; }

public BigInteger getPPODBF(){

if(ppodbf == null) {

ppodbf = p.add(BigInteger.ONE).shiftRight(2); } return ppodbf; } } ... Lớp tạo khóa ... package taovb.ecc.elliptic; import java.math.BigInteger; import java.io.*;

public class ECKey implements Key { protected boolean secret;

protected BigInteger sk; protected ECPoint beta; protected EllipticCurve mother;

public ECKey(EllipticCurve ec) { mother = ec;

secret = true;

sk = new BigInteger(ec.getp().bitLength() + 17,Rand.om); if (mother.getOrder() != null)

sk = sk.mod(mother.getOrder()); beta = (mother.getGenerator()).multiply(sk); beta.fastCache();

}

public String toString() {

if (secret) return ( "Secret key: "+ sk +" "+ beta +" "+ mother); else return("Public key:"+ beta +" "+ mother);

public boolean isPublic() { return (!secret); }

public void writeKey(OutputStream out) throws IOException { DataOutputStream output = new DataOutputStream(out);

mother.writeCurve(output); output.writeBoolean(secret); if(secret) { byte[] skb = sk.toByteArray(); output.writeInt(skb.length); output.write(skb); }

byte[] betab = beta.compress(); output.writeInt(betab.length); output.write(betab);

}

public Key readKey(InputStream in) throws IOException { DataInputStream input = new DataInputStream(in); ECKey k = new ECKey(new EllipticCurve(input)); k.secret = input.readBoolean();

if(k.secret) {

byte[] skb = new byte[input.readInt()]; input.read(skb);

k.sk = new BigInteger(skb); }

byte[] betab = new byte[input.readInt()]; input.read(betab);

k.beta = new ECPoint(betab, k.mother); return k;

}

public void setSecretKey(BigInteger x) { sk = x;

}

public ECKey getPublic() {

ECKey temp = new ECKey(mother); ((ECKey)temp).beta = beta; ((ECKey)temp).sk = BigInteger.ZERO; ((ECKey)temp).secret = false; System.gc(); return temp; }

public void setPublic(ECPoint beta) { this.beta = beta;

}

public void setPublic(BigInteger x, BigInteger y) { try {

beta = new ECPoint(beta.getMother(), x, y); } catch (NotOnMotherException e) {

e.printStackTrace(); }

}

public BigInteger getSK() { return sk;

}

public ECPoint getBeta() { return beta;

} }

... Tạo khóa Private và Public...

package taovb.ecc.elliptic;

private EllipticCurve ec;

private ECCryptoSystem cs;

private ECKey sk;

private ECKey pk;

private ECPoint publicPoint;

public CryptElliptic() {

try {

ec = new EllipticCurve(new secp256r1()); cs = new ECCryptoSystem(ec);

sk = cs.generateKey(); pk = sk.getPublic(); publicPoint = pk.getBeta(); } catch (InsecureCurveException e) {

System.out.println("TestCryptoStreams: " + e); }

}

public ECCryptoSystem getCS() {

return cs; }

public ECKey getSK() {

return sk; }

public ECKey getPK() {

return pk; }

public ECPoint getPublicPoint() {

return publicPoint; }

}

... Cập nhật khóa công khai lên FTP Server ... BigInteger pKeyX = myPublicPointKey.getx();

BigInteger pKeyY = myPublicPointKey.gety();

System.out.println(phone_name + ": " + getString(R.string.connect_success));

List<UserPublicKey> userPublicKeyList = ftpUtils.readFileXml(); List<UserPublicKey> upKeyList = new ArrayList<UserPublicKey>();

boolean exists = false;

for (UserPublicKey item: userPublicKeyList) {

if (item.getUsername().equals(phone_name)) { item.setPublicKeyX(pKeyX.toString()); item.setPublicKeyY(pKeyY.toString()); exists = true; } upKeyList.add(item); } if (exists == false) {

UserPublicKey item = new UserPublicKey(); item.setUsername(phone_name); item.setPublicKeyX(pKeyX.toString()); item.setPublicKeyY(pKeyY.toString()); upKeyList.add(item); } if (ftpUtils.writeFileXML(upKeyList)) {

System.out.println(getString(R.string.update_success)); }

else {

System.out.println(getString(R.string.update_not_success)); }

void get_public_key(AutoCompleteTextView view) { String target = view.getText().toString();

if (m_AlertDlg != null) {

m_AlertDlg.cancel(); }

if (target.length() > 0) {

int acong = target.indexOf("@");

if (acong != -1) {

contact_name = target.substring(0, acong); }

else {

contact_name = target; }

contactPublicKey = getContactPublicKey(contact_name); taovb_demo.setText(contactPublicKey.getBeta().toString()); }

}

private ECKey getContactPublicKey(String contact_name) {

returnftpUtils.getContactPublicKey(cryptElliptic, contact_name); } ... Mã hóa ... package org.sipdroid.sipua.ui; import java.io.UnsupportedEncodingException; import org.sipdroid.sipua.R; import taovb.ecc.elliptic.ECKey; import taovb.ftp.client.FTPUtils; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;

public class EncryptElliptic extends Activity { private FTPUtils ftpUtils;

private boolean connected;

@Override

public void onCreate(Bundle icicle) { super.onCreate(icicle);

requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.encrypt_elliptic);

final EditText crypto_send_to_address = (EditText) findViewById(R.id.crypto_send_to_address);

final EditText crypto_key = (EditText) findViewById(R.id.crypto_key);

final EditText crypto_content = (EditText) findViewById(R.id.crypto_content);

final Button crypto_button_get_key = (Button) findViewById(R.id.crypto_button_get_key);

final Button crypto_button_send = (Button) findViewById(R.id.crypto_button_send);

final Context context = getApplicationContext(); final int duration = Toast.LENGTH_SHORT;

ftpUtils = new FTPUtils("14.160.91.174", "taovb","123456", "/user", "user.xml"); connected = ftpUtils.connectFTP();

if(!connected) {

CharSequence text = "Không kết nối được tới FTP Server";

Toast toast = Toast.makeText(context, text, duration); toast.show();

}

crypto_button_get_key.setOnClickListener(new View.OnClickListener() { public void onClick(View view) {

if (crypto_send_to_address.getText().toString().equals("")) {

CharSequence text = "Bạn phải nhập địa chỉ người nhận";

Toast toast = Toast.makeText(context, text, duration); toast.show(); } else { Sipdroid.contactPublicKey = getContactPublicKey(getName(crypto_send_to_address.getText().toString())); crypto_key.setText(Sipdroid.contactPublicKey.getBeta().toString()); } } }); crypto_button_send.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {

String test = crypto_content.getText().toString(); byte[] test1 = null;

try {

test1 = test.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace();

}

ftpUtils.uploadFile("5554.txt", test1, Sipdroid.cryptElliptic.getCS(), Sipdroid.contactPublicKey);

CharSequence text = "Giai ma thanh cong"; Toast toast = Toast.makeText(context, text, duration); toast.show();

} }); }

private String getName(String address) { String contact_name = "";

int acong = address.indexOf("@");

if (acong != -1) {

contact_name = address.substring(0, acong); } else { contact_name = address; } return contact_name; }

private ECKey getContactPublicKey(String contact_name) {

return Sipdroid.ftpUtils.getContactPublicKey(Sipdroid.cryptElliptic, contact_name); }

}

... Giải mã ... package org.sipdroid.sipua.ui;

import org.sipdroid.sipua.R; import taovb.ftp.client.FTPUtils; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;

public class DecryptElliptic extends Activity { private FTPUtils ftpUtils;

private boolean connected; @Override

public void onCreate(Bundle icicle) { super.onCreate(icicle);

requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.decrypt_elliptic);

final EditText crypto_file_address = (EditText) findViewById(R.id.crypto_file_address); final EditText crypto_decrypt_content = (EditText)

findViewById(R.id.crypto_decrypt_content);

final Button crypto_button_decrypt = (Button) findViewById(R.id.crypto_button_decrypt);

final Context context = getApplicationContext(); final int duration = Toast.LENGTH_SHORT;

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

String file_name = crypto_file_address.getText().toString(); if (file_name.equals("")) {

CharSequence text = "Bạn phải nhập tên tệp"; Toast toast = Toast.makeText(context, text, duration);

toast.show(); } else {

ftpUtils = new FTPUtils("14.160.91.174", "taovb","123456", "/user", file_name); connected = ftpUtils.connectFTP(); if (connected) { String decrypt_content = ftpUtils.decryptFile(Sipdroid.cryptElliptic.getCS(), Sipdroid.cryptElliptic.getSK()); crypto_decrypt_content.setText(decrypt_content); CharSequence text = "Giải mã thành công";

Toast toast = Toast.makeText(context, text, duration); toast.show();

} else {

CharSequence text = "Kết nối không thành công"; Toast toast = Toast.makeText(context, text, duration);

toast.show(); } } } }); } }

Một phần của tài liệu Nghiên cứu giải pháp bảo mật mạng 3G (Trang 54)

Tải bản đầy đủ (PDF)

(70 trang)