多种加密算法实现(JAVA)

有短句“Sun Yat-sen University is a vibrant community of scholarship”请用下列方法加密:
简单代替密码(移位密码),k=5q=26
多表代替密码,其中m=6, K=cipher
纵行置换密码,假定每行10个字节。
请写出加密后密文。

 

加密结果:

简单代替加密:Xzs Dfy-xjs Zsnajwxnyd nx f angwfsy htrrzsnyd tk xhmtqfwxmnu

多表代替加密:Ucc Crv-hlr Wvxciiuqif zu p zzdzpux ewbtyekbn sw aroscczhomg

纵向置换加密:Sntbucu yrnhnU aio nintlYistyaav   rteacos-r ofhssvm ieiimsp

 

 

本作业是使用java编程求解的,以为是求解算法(java语言描述):

 

/*
 * 简单代替加密
 */

public class Ssc {
	private String name;
	private int k;
	private int q;
	
	public Ssc(){
		this.k = 5;
		this.q = 26;
		this.name = "简单代替加密";
	}
	/**
	 * k为位移量,q为字母表长度
	 * @param k
	 * @param q
	 */
	public Ssc(int k, int q){
		this.k = k;
		this.q = q;
		this.name = "简单代替加密";
	}
	/**
	 * 加密
	 * @param str
	 * @return
	 */
	public String encrypt(String str){
		String code = "";
		char[] c = str.toCharArray();
		for (int i = 0; i < c.length; i++) {
			int hc = (int)c[i];
			if(hc >= 97 && hc <= 122){
				int t = hc - 97;
				int tt = (t + k) % q;
				hc = 97 + tt;
			}
			if(hc >= 65 && hc <= 90){
				int t = hc - 65;
				int tt = (t + k) % q;
				hc = 65 + tt;
			}
			char temp = (char)hc;
			code += temp;
		}
		return code;
	}
	public int getK() {
		return k;
	}
	public void setK(int k) {
		this.k = k;
	}
	public int getQ() {
		return q;
	}
	public void setQ(int q) {
		this.q = q;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}


/*
 * 多表代替加密
 */

public class Psc {
	
	private String name;
	private int m;
	private String K;
	
	public Psc(){
		this.m = 6;
		this.K = "run";
		this.name = "多表代替加密";
	}
	/**
	 * m为密钥长度,K为密钥
	 * @param m
	 * @param K
	 */
	public Psc(int m, String K){
		this.m = m;
		this.K = K;
		this.name = "多表代替加密";
	}
	/**
	 * 加密
	 * @param str
	 * @return
	 */
	public String encrypt(String str){
		String code = "";
		char[] c = str.toCharArray();
		
		char[] k = K.toCharArray();
		
		for (int i = 0; i < c.length; i++) {
			int hc = (int)c[i];
			int ki = i;
			if(i >= k.length){
				ki = i % k.length;
			}
			int kt = k[ki] - 97;
			if(hc >= 97 && hc <= 122){
				int t = hc - 97;
				int tt = (t + kt) % 26;
				hc = 97 + tt;
			}
			if(hc >= 65 && hc <= 90){
				int t = hc - 65;
				int tt = (t + kt) % 26;
				hc = 65 + tt;
			}
			char temp = (char) hc;
			code += temp;
		}
		
		return code;
	}

	public int getM() {
		return m;
	}
	public void setM(int m) {
		this.m = m;
	}
	public String getK() {
		return K;
	}
	public void setK(String k) {
		K = k;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}


/*
 * 纵向置换加密
 */

public class Wrc {
	
	private String name;
	private int skip;
	
	public Wrc(){
		this.skip = 10;
		this.name = "纵向置换加密";
	}
	
	/**
	 * skip为间隔
	 * @param skip 
	 */
	public Wrc(int skip){
		this.skip = skip;
		this.name = "纵向置换加密";
	}
	/**
	 * 加密
	 * @param str
	 * @return
	 */
	public String encrypt(String str){
		String code = "";
		
		int len = str.length();
		int group_len = ((len%skip)==0)? len/skip : len/skip + 1;
		char groups[][] = new char[100][100];
		char[] c = str.toCharArray();
		int cc = c.length / skip;
		int cr = c.length % skip;
		if(cr != 0){
			for (int i = 0; i < skip - cr; i++) {
				c[c.length + i] = 0;
			}
		}
		
		for (int i = 0; i < group_len; i++) {
			for (int j = 0; j < skip; j++) {
				groups[i][j] = c[i*skip + j];
//				System.out.print(groups[i][j]);
			}
		}
		
		for (int j = 0; j < skip; j++){
			for (int i = 0; i < group_len; i++) {
				code += groups[i][j];
			}
		}
		
		return code;
	}
	public int getSkip() {
		return skip;
	}
	public void setSkip(int skip) {
		this.skip = skip;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

/*
 * main方法
 */
public class Main {
	public static void main(String[] args) {
		String str ="Sun Yat-sen University is a vibrant community of scholarship";
		Ssc ssc = new Ssc(5, 26);
		System.out.println(ssc.getName() + ":" + ssc.encrypt(str));
		Psc psc = new Psc(6, "cipher");
		System.out.println(psc.getName() + ":" + psc.encrypt(str) );
		Wrc wrc = new Wrc(10);
		System.out.println(wrc.getName() + ":" + wrc.encrypt(str));
	}
}

 

你可能感兴趣的:(java)