简单的加密方式,基本原理就不说了,谷歌一大堆,代码中也写了注释。
已封装,可根据实际需求更改加密、解密规则。
package helper;
/**
* 凯撒密码加密与解密帮助类
* @author chenql
*/
public class CaesarCodeHelper {
public static String CaesarEncript(String origin) {
String encripted = "";// 加密后的字符串
char[] charArray = origin.toCharArray();// 待加密字符串转化为字符数组
for (int i = 0; i < charArray.length; i++) {
if((charArray[i] >= 'd' && charArray[i] <= 'z')
|| ((charArray[i] >= 'D' && charArray[i] <= 'Z'))) {
// ASCII码大于100(d)、小于122(z) 或者 大于68(D)、小于90(Z)的字符-3
// 即向前偏移3个字母
charArray[i] = (char) (charArray[i] - 3);
} else if ((charArray[i] >= 'a' && charArray[i] <= 'c')
|| ((charArray[i] >= 'A' && charArray[i] <= 'C'))) {
// ASCII码大于97(a)、小于99(c) 或者 大于65(A)、小于67(C)的字符+23
// 也是向前偏移3个字母(假设字母往复循环)
charArray[i] = (char) (charArray[i] + 23);
}
encripted+=charArray[i];// 逐个拼接加密后的字符
}
return encripted;
}
public static String CaesarDecript(String encripted) {
String decripted = "";// 解密后的字符串
char[] charArray = encripted.toCharArray();// 待解密字符串转化为字符数组
for (int i = 0; i < charArray.length; i++) {
if((charArray[i] >= 'a' && charArray[i] <= 'w')
|| ((charArray[i] >= 'A' && charArray[i] <= 'W'))) {
// ASCII码大于97(a)、小于119(w) 或者 大于65(A)、小于87(W)的字符3
// 即向后偏移3个字母
charArray[i] = (char) (charArray[i] + 3);
} else if ((charArray[i] >= 'x' && charArray[i] <= 'z')
|| ((charArray[i] >= 'X' && charArray[i] <= 'Z'))) {
// ASCII码大于120(x)、小于122(z) 或者 大于88(X)、小于90(Z)的字符-23
// 也是向后偏移3个字母(假设字母往复循环)
charArray[i] = (char) (charArray[i] - 23);
}
decripted+=charArray[i];// 逐个拼接加密后的字符
}
return decripted;
}
}
测试代码:
private void test() {
String string = "abcdefvwxyzABCDEFVWXYZ this is for test";// 待加密字符串
String encripted = CaesarCodeHelper.CaesarEncript(string);
String decripted = CaesarCodeHelper.CaesarDecript(encripted);
Log.d("test", "origin:\n" + string);
Log.d("test", "encripted:\n" + encripted);
Log.d("test", "decripted:\n" + decripted);
}
结果输出: