JAVA实现字符串加密
编写一个加密程序。要求从键盘上输入一字符串(可含数字、大小写字母、特殊符号(空格 , . ?!) ),及一个密码K(密码取值为 1-99)。
加密规则是:
特殊符号(空格 ,. ?!)不加密,直接原样输出;
大小写字母在字母空间内向后循环移动 K位;
数字在数字空间中向后循环移动 K位。
一、解题思路
由于字母空间和数字空间都可用ASCII码来界定,故本文借助ASCII码实现加密功能。关于ASCII码的具体介绍可参见百度百科。由ASCII码可知,65–90为大写字母,区间长度为26; 97–122为小写字母,区间长度为26;48–57为阿拉伯数字,区间长度为10。
根据字符ASCII码和不同的空间进行加密,公式如下:
A S C I I − m i n A S C I I + K l e n g t h + m i n A S C I I \frac{ASCII-minASCII+K}{length}+minASCII lengthASCII−minASCII+K+minASCII
二、JAVA实现
public class Encryption {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("明文 :");
String str = input.next(); // 从键盘输入字符串
System.out.print("密码 K = ");
int K = input.nextInt(); // 从键盘输入密码K
String newStr = new String(); // 创建新字符串存储密文
for (int i = 0; i < str.length(); i++) {
char temp = str.charAt(i);
if (temp >= 65 && temp <= 90) { //判断是否为大写字母
newStr += encryptChar(temp, K, 65, 26);
}
else if (temp >= 97 && temp <= 122) { // 判断是否为小写字母
newStr += encryptChar(temp, K, 97, 26);
}
else if (temp >= 48 && temp <= 57) { // 判断是否为数字
newStr += encryptChar(temp, K, 48, 10);
}
else {
newStr += temp;
}
}
System.out.println("密文 :" + newStr);
}
public static char encryptChar(char ch, int key, int minAscii, int mod) {
/* 根据字符ASCII码和不同的空间进行加密
* ch为所需加密的字符
* key为密码
* minAscii用以判断空间,65为大写字母,97为小写字母,48为数字空间
* mod为空间长度
*/
int temp = Integer.valueOf(ch);
temp = (temp - minAscii + key) % mod + minAscii;
return (char) temp;
}
}