使用 String 对象 password 的字符序列作为密码,char[] p = password.toCharArray(); 假设数组 p 的长度为 n
将待加密的 sourceString 的字符序列按顺序以 n 个字符为一组,对每组中的字符用数组 p 的对应字符做加法运算
c0 = (char)(a0 +p[0]),c1 = (char)(a1, + p[1] ),…,cn-1 = (char)(an-1+p[n-1]),其解密算法是对密文做减法运算
public class Main {
public static void main(String[] args) {
String password = "HELLO";
String sourceString = "围魏救赵";
String encrypt = encrypt(password, sourceString);
System.out.println("密文:" + encrypt); // 密文:圼鮔斝跁
String decrypt = decrypt(password, encrypt);
System.out.println("明文:" + decrypt); // 明文:围魏救赵
}
/**
* 加法运算,实现加密
*
* @param password 密码
* @param source 明文
* @return
*/
public static String encrypt(String password, String source) {
char[] p = password.toCharArray();
int n = p.length;
char[] s = source.toCharArray();
for (int i = 0; i < s.length; i++) { // 遍历明文
s[i] = (char) (s[i] + p[i % n]); // i % n 取余,对应字符做加法运算
}
return new String(s);
}
/**
* 减法运算,实现解密
*
* @param password 密码
* @param secret 密文
* @return
*/
public static String decrypt(String password, String secret) {
char[] p = password.toCharArray();
int n = p.length;
char[] s = secret.toCharArray();
for (int i = 0; i < s.length; i++) { // 遍历密文
s[i] = (char) (s[i] - p[i % n]); // i % n 取余,对应字符做减法运算
}
return new String(s);
}
}