zoukankan      html  css  js  c++  java
  • 异或加密法 在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。 解密的方法就是再执行一次同样的操作。

    /*	异或加密法
     在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。
     解密的方法就是再执行一次同样的操作。
     加密过程中n位二进制数会循环使用。并且其长度也可能不是8的整数倍。
     下面的代码演示了如何实现该功能。
    
    
     请仔细阅读,填写空缺的代码(下划线部分)。
     注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
     直接写在题面中不能得分。
     */
    public class 异或加密法 {
    	public static void print(char[] p){
    		for(char x:p){
    			System.out.printf("%s", x);
    		}
    		System.out.println();
    	}
    	public static void f(char[] buf, char[] uckey, int n) {
    		int i;
    		for (i = 0; i < n; i++)
    			buf[i] = (char) (buf[i] ^ uckey[i]);
    	}
    
    	public static void main(String[] args) {
    		char p[] = "abcd中国人123".toCharArray(); // 待加密串
    		char[] key = "11001100010001110".toCharArray(); // 以串的形式表达的密匙,运算时要转换为按位存储的形式。
    		int np = p.length;
    		int nk = key.length;
    		char[] uckey = new char[np];
    
    		// 密匙串需要按位的形式循环拼入 uckey中
    		int i;
    		for (i = 0; i < np * 8; i++) {
    			if (key[i % nk] == '1')
    				uckey[i/8] |= (char)0x80 >> (i%8); // 填空1
    			else
    				uckey[i/8] &= ~(char)0x80 >> (i%8); // 填空2
    		}
    		f(p, uckey, p.length);
    		print(p);
    		f(p, uckey, p.length);
    		print(p);
    	}
    }
    

    运行结果:

    ­%G亞囬乣¹Þ÷
    abcd中国人123
    


  • 相关阅读:
    HDU 5642 King's Order 动态规划
    HDU 5640 King's Cake GCD
    HDU 5641 King's Phone 模拟
    HDU 5299 Circles Game 博弈论 暴力
    HDU 5294 Tricks Device 网络流 最短路
    HDU 5289 Assignment rmq
    HDU 5288 OO’s Sequence 水题
    星际争霸 虚空之遗 人族5BB 操作流程
    Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列
    Codeforces Beta Round #3 C. Tic-tac-toe 模拟题
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3055187.html
Copyright © 2011-2022 走看看