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

📄 codingmachine.java

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

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

public class CodingMachine {

        Generator gen;
        int[] datafgprt;//密文的指纹
        String srcString="";

        public CodingMachine(){
                gen=new Generator();
        }

//	对明文进行加密
        public String encrypt(String srcmsg){
                byte[] srcbytes=srcmsg.getBytes();
                byte[] keys=gen.getKeys();
                byte[] desbytes=new byte[srcbytes.length];
                datafgprt=new int[srcbytes.length];
                byte key;
                String desmsg="";
                int[] keysID=gen.getKeysID();
                int id;
                int index;
                TreeMap<Integer, Character> codeMap=gen.getCodeMap();
                //将明文与key异或
                for(int i=0;i<srcbytes.length;i++){
                        index=i%100;
                        id=keysID[index];
                        key=keys[id];
                        desbytes[i]=(new Integer(srcbytes[i]^key)).byteValue();
                }
                //将异或后的码通过字符表转化成字母和数字
                for(int i=0;i<desbytes.length;i++){
                        int mapKey=desbytes[i];
                        if(codeMap.containsKey(mapKey)){
                                desmsg=desmsg+codeMap.get(mapKey);
                                datafgprt[i]=0;
                        }
                        else{
                                desmsg=desmsg+mapKey;
                                if(mapKey<10){
                                        datafgprt[i]=1;
                                }
                                else{
                                        if(mapKey>=10&&mapKey<100){
                                                datafgprt[i]=2;
                                        }
                                        else{
                                                datafgprt[i]=3;
                                        }
                                }
                        }
                }
                /*System.out.println("数据指纹:"+datafgprt.length);
                for(int i=0;i<datafgprt.length;i++){
                        System.out.print(datafgprt[i]+" ");
                }
                System.out.println();*/
                return desmsg;
        }

//	对密文进行解密
        public String dencrypt(String desmsg){
                TreeMap<Character,Integer> reverseCodeMap=gen.getReverseCodeMap();
                byte[] keys=gen.getKeys();
                int[] keysID=gen.getKeysID();
                int flag;
                int pos=0;
                byte[] srcbytes=new byte[datafgprt.length];
                String srcmes;
                for(int i=0;i<datafgprt.length;i++){
                        if(datafgprt[i]==0){//从字符逆对应表中找原码
                                char keyChar=desmsg.charAt(pos);
                                srcbytes[i]=reverseCodeMap.get(keyChar).byteValue();
                                pos=pos+1;
                        }
                        else{
                                if(datafgprt[i]==1){//一位数字,原样转化
                                        String substr=desmsg.substring(pos, pos+1);
                                        flag=Integer.parseInt(substr);
                                        srcbytes[i]=(new Integer(flag)).byteValue();
                                        pos=pos+1;
                                }
                                else{
                                        if(datafgprt[i]==2){//两位数字,原样转化
                                                String substr=desmsg.substring(pos, pos+2);
                                                flag=Integer.parseInt(substr);
                                                srcbytes[i]=(new Integer(flag)).byteValue();
                                                pos=pos+2;
                                        }
                                        else{//三位数字,原样转化
                                                String substr=desmsg.substring(pos, pos+3);
                                                flag=Integer.parseInt(substr);
                                                srcbytes[i]=(new Integer(flag)).byteValue();
                                                pos=pos+3;
                                        }
                                }
                        }
                }
                for(int i=0;i<srcbytes.length;i++){
                        int index=i%100;
                        int temp=srcbytes[i]^keys[keysID[index]];
                        srcbytes[i]=(new Integer(temp)).byteValue();
                }
                srcmes=new String(srcbytes);
                return srcmes;
        }

        /*public static void main(String[] args) {
                CodingMachine cm=new CodingMachine();
                String srcmsg="askdfakdjoapwJhJKkhLkjKlkLKlktcjhlaspeihHjFfyGiPOjiHGgFgfFHlskFl;kJDlksdjLKJlkdjoiajHkhhlHkHJhgJGkhJHkHkjhJHkHhJhkJGugUjHkooiLKJHgJgJG";
                System.out.println("明文长度:"+srcmsg.length());
                System.out.println("明文:"+srcmsg);
                cm.gen.showMsg();
                String desmsg=cm.encrypt(srcmsg);
                System.out.println("密文:"+desmsg);
                srcmsg=cm.dencrypt(desmsg);
                System.out.println("解密后的明文:"+srcmsg);
                System.out.println("解密后的明文长度:"+srcmsg.length());
        }*/
}

⌨️ 快捷键说明

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