رمزنگاری و رمزگشایی داده ها با الگوریتم Base64 در برنامه نویسی اندروید

Base64

با سلام در خدمت شما هستیم با یکی دیگر از آموزش های برنامه نویسی اندروید.

در نود درصد برنامه پایگاه داده (Database) وجود دارد و اطلاعات مهمی در آن ذخیره می شوند. اگر هم برنامه پایگاه داده نداشته باشد، به احتمال زیاد از SharedPreferences برای ذخیره داده ها استفاده شده است. دسترسی به این موارد بسیار ساده است و افراد با داشتن دانش اندک برنامه نویسی و یا برخوردار بودن از دستگاه اندرویدی روت به راحتی می توانند به اطلاعات برنامه شما دسترسی پیدا کرده و آنها را طبق سلیقه خود تغییر دهند.

جلوگیری از تغییر اطلاعات برنامه

حتما با خواندن توضیحات بالا نگران شده اید که داده های برنامه شما دستکاری شوند. نگران نباشید چون روش هایی در نظر گرفته شده است که شما می توانید با بهره گیری از آنها داده های خود را به صورت رمزنگاری شده ذخیره کنید. یکی از این روش ها الگوریتم Base64 می باشد. این الگوریتم در زبان های های مختلف برنامه نویسی کاربرد دارد. در این آموزش قصد داریم که با نحوه استفاده از آن در برنامه نویسی اندروید آشنا شویم.

الگوریتم Base64 در برنامه نویسی اندروید

ما با استفاده از این الگوریتم این امکان را داریم که داده ها را رمزنگاری و رمزگشایی کنیم، که در ادامه با هردو آنها آشنا می شویم.

در اینجا ما قصد داریم متنی را دریافت کنیم و اگر گزینه رمزنگاری انتخاب شده بود آن را Encode و اگر گزینه رمزگشایی انتخاب شده بود آن را Decode کرده و نمایش دهیم. برای این کار کد های زیر را به Layout خودم اضافه کنید.

<EditText
    android:layout_width=”300dp”
    android:layout_height=”50dp”
    android:layout_marginTop=”20dp”
    android:id=”@+id/txtInput”/>
<RadioGroup
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:layout_marginTop=”50dp”>
    <RadioButton
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”رمزنگاری”
        android:textSize=”20dp”
        android:checked=”true”
        android:id=”@+id/encoding_rb”/>

    <RadioButton
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”رمزگشایی”
        android:textSize=”20dp”
        android:id=”@+id/decoding_rb”/>
</RadioGroup>
<Button
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:layout_marginTop=”50dp”
    android:text=”اجرا”
    android:textSize=”25sp”
    android:onClick=”onBtnClick”/>
<TextView
    android:layout_width=”300dp”
    android:layout_height=”50dp”
    android:layout_marginTop=”50dp”
    android:id=”@+id/txtResult”/>

سپس به سراغ کد های جاوا بروید و اشیاء زیر را به صورت سراسری تعریف کنید.

RadioButton encode,decode;
EditText input;
TextView result;

اکنون باید در متد ()onCreate ارتباط این موارد را با اجزای صفحه خود برقرار کنید.

encode=findViewById(R.id.encoding_rb);
decode=findViewById(R.id.decoding_rb);

input=findViewById(R.id.txtInput);
result=findViewById(R.id.txtResult);

حال در ()onBtnClick یک try/catch ایجاد کنید.

public void onBtnClick(View v){
    try {

    }catch (Exception e){

    }
}

رمزنگاری داده ها

اگر کاربر گزینه رمز نگاری را انتخاب کرده بود، باید متن ورودی را بخوانیم و آن را به آرایه ای از byte ها تبدیل کنیم و سپس با استفاده از کلاس Base64 آن را رمزنگاری کنیم. خروجی که در آخر نصیب ما می شود رشته ای از حروف کوچک و بزرگ انگلیسی و علامت های در هم ریخته است.

String text = input.getText().toString();
byte[] txtBytes = text.getBytes();
String encoded = Base64.encodeToString(txtBytes, Base64.DEFAULT);
result.setText(encoded);

پیش نمایش رمزنگاری

رمزگشایی داده ها

برای بازگرداندن یک متن رمز نگاری شده به حالت اولیه خود باید آن را Decode کنیم. برای این کار متن Encode شده را به کلاس Base64 می دهیم. خروجی حاصله آرایه ای از byte ها می باشد که با استفاده از کلاس String می توانیم آن را به رشته تبدیل کرده و نمایش دهیم.

String text = input.getText().toString();
byte[] txtBytes = Base64.decode(text, Base64.DEFAULT);
String decoded = new String(txtBytes, “utf-8”);
result.setText(decoded);

پیش نمایش رمزگشایی

دقت کنید که اگر احتمال دارد متن فارسی باشد، حتما باید مقدار utf-8 را به عنوان آرگومان دوم کلاس String وارد کنید.

کدهای برنامه

activity_main.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    xmlns:tools=”http://schemas.android.com/tools”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:orientation=”vertical”
    android:gravity=”center_horizontal”
    tools:context=”.MainActivity”>
    <EditText
        android:layout_width=”300dp”
        android:layout_height=”50dp”
        android:layout_marginTop=”20dp”
        android:id=”@+id/txtInput”/>
    <RadioGroup
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_marginTop=”50dp”>
        <RadioButton
            android:layout_width=”wrap_content”
            android:layout_height=”wrap_content”
            android:text=”رمزنگاری”
            android:textSize=”20dp”
            android:checked=”true”
            android:id=”@+id/encoding_rb”/>

        <RadioButton
            android:layout_width=”wrap_content”
            android:layout_height=”wrap_content”
            android:text=”رمزگشایی”
            android:textSize=”20dp”
            android:id=”@+id/decoding_rb”/>
    </RadioGroup>
    <Button
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_marginTop=”50dp”
        android:text=”اجرا”
        android:textSize=”25sp”
        android:onClick=”onBtnClick”/>
    <TextView
        android:layout_width=”300dp”
        android:layout_height=”50dp”
        android:layout_marginTop=”50dp”
        android:id=”@+id/txtResult”/>
</LinearLayout>

MainActivity.java

package com.example.myapplication;

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

public class MainActivity extends AppCompatActivity {

    RadioButton encode,decode;
    EditText input;
    TextView result;

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

        encode=findViewById(R.id.encoding_rb);
        decode=findViewById(R.id.decoding_rb);

        input=findViewById(R.id.txtInput);
        result=findViewById(R.id.txtResult);
    }

    public void onBtnClick(View v){
        try {
            if (encode.isChecked()) {
                String text = input.getText().toString();
                byte[] txtBytes = text.getBytes();
                String encoded = Base64.encodeToString(txtBytes, Base64.DEFAULT);
                result.setText(encoded);
            } else {
                String text = input.getText().toString();
                byte[] txtBytes = Base64.decode(text, Base64.DEFAULT);
                String decoded = new String(txtBytes, “utf-8”);
                result.setText(decoded);
            }
        }catch (Exception e){

        }
    }
}

فیلم آموزش رمزنگاری و رمزگشایی داده ها در برنامه نویسی اندروید

این آموزش هم به پایان رسید. لطفا نظرات، پیشنهادات و انتقادات خود را برای ما بنویسید. همچنین اگر سوالی دارید می توانید آن را در بخش نظرات برای ما بازگو کنید. ما در اسرع وقت پاسخ گوی شما خواهیم بود.

اگر به برنامه نویسی اندروید علاقه دارید، می توانید در دوره مقدماتی برنامه نویسی ما ثبت نام کنید.

دیدگاه بگذارید

avatar
  Subscribe  
Notify of