仿射密码是根据26个英文字母转换成0到25,总共26个数字,然后根据e(x)=y=ax+b(mod26)进行加密的,其中a和b为0到25中的数字,且a和26互素,即gcd(a,26)=1,加密之后得到的y转成英文字母即可实现加密
MainActivity类:
package com.example.administrator.encode;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private String input = null;
private String output = null;
private String outstring = "abcdefghijklmnopqrstuvwxyz";
private int inputnum[] = new int[1000];
private int outputnum[] = new int[1000];
private int out[] = new int[26];
private int i;
private String a, b;
private char outputchar[] = new char[1000];
private EditText edit1;
private EditText edit2;
private EditText edit3;
private TextView text6;
private Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text6 = (TextView) findViewById(R.id.text6);
edit1 = (EditText) findViewById(R.id.edit1);
edit2 = (EditText) findViewById(R.id.edit2);
edit3 = (EditText) findViewById(R.id.edit3);
button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
input = edit1.getText().toString();
char inputchar[] = input.toCharArray();
char outstringchar[] = outstring.toCharArray();
for (i = 0; i < inputchar.length; i++) {
if (inputchar[i] >= 'a' && inputchar[i] <= 'z') {
out[inputchar[i] - 'a']++;//统计各个字母个数
inputnum[i] = inputchar[i] - 'a';
}
}
a = edit2.getText().toString();//得到加密的a和b
b = edit3.getText().toString();
if (!a.isEmpty() && !b.isEmpty()) { //这里要考虑没有输入a、b值的情况
int aint = Integer.parseInt(a);//String转int
int bint = Integer.parseInt(b);
input = edit1.getText().toString();
for (i = 0; i < inputchar.length; i++) {
outputnum[i] = aint * inputnum[i] + bint;
// if (outputnum[i] < 0) {
// outputnum[i] = outputnum[i] + 26;
// }
outputnum[i] = outputnum[i] % 26;
outputchar[i] = outstringchar[outputnum[i]];
}
output = String.valueOf(outputchar);//char[]转string
text6.setText(output.toUpperCase());//string类小写转大写
} else {
Toast.makeText(MainActivity.this,
"请输入a和b的值", Toast.LENGTH_SHORT).show();
}
}
});
}
}
activity_main.xml:
<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"
tools:context="com.example.administrator.MainActivity">
<TextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="请输入小写字母"
android:textSize="30sp" />
<EditText
android:id="@+id/edit1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:hint="Type here"
android:gravity="center"
android:maxLines="5" />
<TextView
android:id="@+id/text3"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="输入加密时的a、b的值"
android:textSize="30sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:id="@+id/text4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="a : "
android:textSize="30sp" />
<EditText
android:id="@+id/edit2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:hint="Type here" />
<TextView
android:id="@+id/text5"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="b : "
android:textSize="30sp" />
<EditText
android:id="@+id/edit3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:maxLines="5"
android:hint="Type here" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:orientation="horizontal">
<Button
android:id="@+id/button2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:text="加密" />
<EditText
android:id="@+id/text6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="3" />
</LinearLayout>
</LinearLayout>
效果图:
完整android studio工程:
http://download.youkuaiyun.com/detail/amazinguu/9523389