-----------------------------------
android培训
、
java培训
、期待与您交流! --------------------------------------
密钥加密是将密钥数字串值循环加到明文(需要加密的文字串)上,使得明文变形而不可阅读,变形后的文字串称为密文。
此加密的方式在日后的工作中也可能会经常用到!!!现在学习、正好。
例如,密钥为5201314,明文为“I Love You Wq”,则循环加密的过程及结果为:
这里的密钥加密是循环加密,例如密钥为5201314,当密钥的最后一位(4)加完后,密码还没有加密完,就从密钥的第一位(5)再开始加。
加密后密文为:N"Lpyf$^qu!Zr
例1:
输入密钥:123
输入密码:123
输出密文:246
解析例子1:
49+1=char(50)=2
50+2=char(52)=4
51+3=char(54)=6
例2:
密钥为:5201314
明文为:I Love You Wq
加密后密文为:N"Lpyf$^qu!Zr
根据上面描述,我编写了实现该功能的代码,代码如下:
package itheima.test; import java.util.ArrayList; import java.util.List; /** * 根据密钥和明进行加密的算法 * @author 罗鑫 */ public class SecretKey { /** * 获取传入的字符转换为对应的ascii码 * @param key * @return */ public int toAsc(char key) { return (int)key; } /** * 传入ascii,返回对应的字符 * @param ascii * @return */ public char toChar(int ascii) { return (char) ascii; } /** * 传入明文和密钥,返回加密后的密文 * @param miyue * @param minwen * @return */ public String encrypt(String miyue , String minwen ) { List<Integer> mi = new ArrayList<Integer>(); int j = 0; //将密文字符串转换成与明文长度相同,内容循环的ArrayList for(int i = 0 ; i<minwen.length() ; i ++){ int a = 0 ; //如果明文长度超过密钥长度,取完密钥之后继续从头开始取 if (i+1>miyue.length()) { if (i % miyue.length() == 0) {j=0;} a = Integer.parseInt(miyue.charAt(j)+""); //将charAt的游标置0 j++; }else{ a = Integer.parseInt(miyue.charAt(i)+""); } //将每一位解析的密钥值放入ArrayList mi.add(a); } StringBuilder sb = new StringBuilder(); //循环将明文的ASCII码与解析后的密钥ArrayList(mi)相加后转换成字符 for(int i = 0 ; i < minwen.length() ; i ++){ //分别取值相加 char a = minwen.charAt(i); int b = toAsc(a) + mi.get(i); //将加密后的字符连接起来 sb.append(toChar(b)+""); } return sb.toString(); } public static void main(String[] args) { SecretKey key = new SecretKey(); System.out.println(key.encrypt("123", "123"));; } }