⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generator.java

📁 自创加密解密算法
💻 JAVA
字号:
package com.mars.func;

/**
 * @author 刘权
 * @version 1.0
 */
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;


public class Generator {
        private byte[] keys;
        private int[] keysID;
        private TreeMap<Integer, Character> codeMap;
        private TreeMap<Character, Integer> reverseCodeMap;

        public Generator(){
                keys=genKeys();
                keysID=genKeysID();
                codeMap=genCodeMap();
                reverseCodeMap=genReverseCodeMap(codeMap);
        }

//	生成长度为100的密钥数组
        /**
         * 该密钥数组中的byte类型整数将用来对明文进行
         * 异或加密
         * */
        private byte[] genKeys(){
                byte[] keys=new byte[100];

                Random rand=new Random();

                for(int i=0;i<100;i++){
                        byte key=(new Integer(rand.nextInt(128))).byteValue();
                        keys[i]=key;
                }
                return keys;
        }

//	生成对密钥数组中密钥进行选取的选取器
        /**
         * 用选取器中随机生成的序号去取密钥数组中的整数
         * */
        private int[] genKeysID(){
                int[] keysID=new int[100];

                Random rand=new Random();

                for(int i=0;i<100;i++){
                        int id=rand.nextInt(100);
                        keysID[i]=id;
                }
                return keysID;
        }

//	生成数字和字符A-Z、a-z、0-9之间的对应表
        /**
         * 对明文异或后的密文是0-127之间的数字
         * 将选取这些数字的某些与字符A-Z、a-z、0-9形成一一对应
         * 用于加密
         * */
        private TreeMap<Integer,Character> genCodeMap(){
                TreeMap<Integer, Character> codeMap=new TreeMap<Integer,Character>();

                Random rand=new Random();

                char[] code={
                                          'a','b','c','d','e','f','g','h',
                                      'i','j','k','l','m','n','o','p',
                                      'q','r','s','t','u','v','w','x',
                                      'y','z','A','B','C','D','E','F',
                                      'G','H','I','J','K','L','M','N',
                                      'O','P','Q','R','S','T','U','V',
                                      'W','X','Y','Z','0','1','2','3',
                                      '4','5','6','7','8','9'};
                for(int i=0;i<code.length;i++){
                        int key=0;
                        //生成一个codeMap中没有的键值
                        do{
                                key=rand.nextInt(128);
                        }
                        while(codeMap.containsKey(key));

                        codeMap.put(key, code[i]);
                }

                return codeMap;
        }

//	生成与字符对应表相反的逆对应表
        /**
         * 该表用于解密用
         * */
        private TreeMap<Character,Integer> genReverseCodeMap(TreeMap<Integer,Character> codeMap){
                Integer index;
                char value;
                TreeMap<Character,Integer> reverseCodeMap=new TreeMap<Character,Integer>();
                Set<Integer> keySet=codeMap.keySet();
                Iterator<Integer> keyIterator=keySet.iterator();
                while(keyIterator.hasNext()){
                        index=keyIterator.next();
                        value=codeMap.get(index);
                        reverseCodeMap.put(value, index);
                }
                return reverseCodeMap;
        }

//	获取密钥数组
        public  byte[] getKeys(){
                return keys;
        }

//	获取密钥选择器
        public int[] getKeysID(){
                return keysID;
        }

//	获取字符对应表
        public TreeMap getCodeMap(){
                return codeMap;
        }

//	获取字符逆对应表
        public TreeMap getReverseCodeMap(){
                return reverseCodeMap;
        }
        public void showMsg(){

                int index;
                char value;
                char value1;
                int index1;

                System.out.print("密钥:");
                for(int i=0;i<keys.length;i++){
                        System.out.print(""+keys[i]+" ");
                }
                System.out.println();
                System.out.print("密钥选择器:");
                for(int i=0;i<keysID.length;i++){
                        System.out.print(""+keysID[i]+" ");
                }
                System.out.println();
                System.out.println("字符对照表");
                Set<Integer> keySet=codeMap.keySet();
                Iterator<Integer> keyIterator=keySet.iterator();
                while(keyIterator.hasNext()){
                        index=keyIterator.next();
                        value=codeMap.get(index);
                        System.out.println("KEY:"+index+" VALUE:"+value);
                }
                Set<Character> keySet1=reverseCodeMap.keySet();
                Iterator<Character> keyIterator1=keySet1.iterator();
                while(keyIterator1.hasNext()){
                        value1=keyIterator1.next();
                        index1=reverseCodeMap.get(value1);
                        System.out.println("KEY:"+value1+" VALUE:"+index1);
                }
        }

        public static void main(String[] args){
                Generator gen=new Generator();
                gen.showMsg();

        }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -