Java 解密已加密的字符串

Java 解密已加密的字符串,java,Java,我有一个项目,我必须加密一个字符串,然后解密它。我得到的加密部分,但我找不到解密的方法 加密文件 file = Input.readFile("txt.txt").toUpperCase(); ArrayList<String> mylist = new ArrayList<String>(); mylist.add("\uD83C\uDCA1"); mylist.add("\uD83C\uDCB1"); mylist.add("\uD83C\uDCC1"); my

我有一个项目,我必须加密一个字符串,然后解密它。我得到的加密部分,但我找不到解密的方法

加密文件

file = Input.readFile("txt.txt").toUpperCase();

ArrayList<String>  mylist = new ArrayList<String>(); 
mylist.add("\uD83C\uDCA1"); mylist.add("\uD83C\uDCB1"); mylist.add("\uD83C\uDCC1"); mylist.add("\uD83C\uDCD1");
mylist.add("\uD83C\uDCA2"); mylist.add("\uD83C\uDCB2"); mylist.add("\uD83C\uDCC2"); mylist.add("\uD83C\uDCD2");
mylist.add("\uD83C\uDCA3"); mylist.add("\uD83C\uDCB3"); mylist.add("\uD83C\uDCC3"); mylist.add("\uD83C\uDCD3");
mylist.add("\uD83C\uDCA4"); mylist.add("\uD83C\uDCB4"); mylist.add("\uD83C\uDCC4"); mylist.add("\uD83C\uDCD4");
mylist.add("\uD83C\uDCA5"); mylist.add("\uD83C\uDCB5"); mylist.add("\uD83C\uDCC5"); mylist.add("\uD83C\uDCD5");
mylist.add("\uD83C\uDCA6"); mylist.add("\uD83C\uDCB6"); mylist.add("\uD83C\uDCC6"); mylist.add("\uD83C\uDCD6");
mylist.add("\uD83C\uDCA7"); mylist.add("\uD83C\uDCB7"); mylist.add("\uD83C\uDCC7"); mylist.add("\uD83C\uDCD7");
mylist.add("\uD83C\uDCA8"); mylist.add("\uD83C\uDCB8"); mylist.add("\uD83C\uDCC8"); mylist.add("\uD83C\uDCD8");
mylist.add("\uD83C\uDCA9"); mylist.add("\uD83C\uDCB9"); mylist.add("\uD83C\uDCC9"); mylist.add("\uD83C\uDCD9");
mylist.add("\uD83C\uDCAA"); mylist.add("\uD83C\uDCBA"); mylist.add("\uD83C\uDCCA"); mylist.add("\uD83C\uDCDA");
mylist.add("\uD83C\uDCAB"); mylist.add("\uD83C\uDCBB"); mylist.add("\uD83C\uDCCB"); mylist.add("\uD83C\uDCDB");
mylist.add("\uD83C\uDCAD"); mylist.add("\uD83C\uDCBD"); mylist.add("\uD83C\uDCCD"); mylist.add("\uD83C\uDCDD");
mylist.add("\uD83C\uDCAE"); mylist.add("\uD83C\uDCBE"); mylist.add("\uD83C\uDCCE"); mylist.add("\uD83C\uDCDE");

//Encypt
//going backwards
 for(int i = file.length();  i > 0 ; i--){
    index ++;
    //shuffle the list 
    //Collections.shuffle(mylist);
    char symbol = file.charAt(file.length() - index);

    //change the ascii number by 1-10
    int ascii = ((int)symbol); 

    //if ascii is between A-Z or a-z display a card
    if( ((ascii >= (int)'A' && ascii <= (int)'Z'))) { 
      build += mylist.get(ascii - 65); 
    }
    //if the ascii number is divisible by 2, display a 0, if not a 1 
    else{
    if(ascii % 2 == 0){
      build += 0;
    }else{
      build += 1;
    }

    }
 }
 try{
   Files.write(Paths.get("encryptedFile.txt"), build.getBytes());
 }catch(Exception e){
   System.out.println("Oh NO!");
 }

System.out.println("\nYour encrypted message is: \n" + build);
System.out.println("---------------------------------------------\t");
//End Encypt
file=Input.readFile(“txt.txt”).toUpperCase();
ArrayList mylist=新的ArrayList();
mylist.add(“\uD83C\uDCA1”);mylist.add(“\uD83C\uDCB1”);mylist.add(“\uD83C\uDCC1”);mylist.add(“\uD83C\uDCD1”);
mylist.add(“\uD83C\uDCA2”);mylist.add(“\uD83C\uDCB2”);mylist.add(“\uD83C\uDCC2”);mylist.add(“\uD83C\uDCD2”);
mylist.add(“\uD83C\uDCA3”);mylist.add(“\uD83C\uDCB3”);mylist.add(“\uD83C\uDCC3”);mylist.add(“\uD83C\uDCD3”);
mylist.add(“\uD83C\uDCA4”);mylist.add(“\uD83C\uDCB4”);mylist.add(“\uD83C\uDCC4”);mylist.add(“\uD83C\uDCD4”);
mylist.add(“\uD83C\uDCA5”);mylist.add(“\uD83C\uDCB5”);mylist.add(“\uD83C\uDCC5”);mylist.add(“\uD83C\uDCD5”);
mylist.add(“\uD83C\uDCA6”);mylist.add(“\uD83C\uDCB6”);mylist.add(“\uD83C\uDCC6”);mylist.add(“\uD83C\uDCD6”);
mylist.add(“\uD83C\uDCA7”);mylist.add(“\uD83C\uDCB7”);mylist.add(“\uD83C\uDCC7”);mylist.add(“\uD83C\uDCD7”);
mylist.add(“\uD83C\uDCA8”);mylist.add(“\uD83C\uDCB8”);mylist.add(“\uD83C\uDCC8”);mylist.add(“\uD83C\uDCD8”);
mylist.add(“\uD83C\uDCA9”);mylist.add(“\uD83C\uDCB9”);mylist.add(“\uD83C\uDCC9”);mylist.add(“\uD83C\uDCD9”);
mylist.add(“\uD83C\uDCAA”);mylist.add(“\uD83C\uDCBA”);mylist.add(“\uD83C\uDCCA”);mylist.add(“\uD83C\uDCDA”);
mylist.add(“\uD83C\uDCAB”);mylist.add(“\uD83C\uDCBB”);mylist.add(“\uD83C\uDCCB”);mylist.add(“\uD83C\uDCDB”);
mylist.add(“\uD83C\uDCAD”);mylist.add(“\uD83C\uDCBD”);mylist.add(“\uD83C\uDCCD”);mylist.add(“\uD83C\uDCDD”);
mylist.add(“\uD83C\uDCAE”);mylist.add(“\uD83C\uDCBE”);mylist.add(“\uD83C\uDCCE”);mylist.add(“\uD83C\uDCDE”);
//百科全书
//倒退
对于(int i=file.length();i>0;i--){
索引++;
//洗牌
//收藏。洗牌(mylist);
char symbol=file.charAt(file.length()-index);
//将ascii数字更改为1-10
int ascii=((int)符号);
//如果ascii在A-Z或A-Z之间,则显示卡

如果((ascii>=(int)'A'&&ascii,您将在注释中找到带有解释的工作代码

import java.util.*;

class EncryptDecrypt {

    public static void main(String[] args) {

        // List to convert ascii characters to cards
        ArrayList<String>  mylist = new ArrayList<String>(); 
        mylist.add("\uD83C\uDCA1"); mylist.add("\uD83C\uDCB1");
        mylist.add("\uD83C\uDCC1"); mylist.add("\uD83C\uDCD1");
        mylist.add("\uD83C\uDCA2"); mylist.add("\uD83C\uDCB2");
        mylist.add("\uD83C\uDCC2"); mylist.add("\uD83C\uDCD2");
        mylist.add("\uD83C\uDCA3"); mylist.add("\uD83C\uDCB3");
        mylist.add("\uD83C\uDCC3"); mylist.add("\uD83C\uDCD3");
        mylist.add("\uD83C\uDCA4"); mylist.add("\uD83C\uDCB4"); 
        mylist.add("\uD83C\uDCC4"); mylist.add("\uD83C\uDCD4");
        mylist.add("\uD83C\uDCA5"); mylist.add("\uD83C\uDCB5"); 
        mylist.add("\uD83C\uDCC5"); mylist.add("\uD83C\uDCD5");
        mylist.add("\uD83C\uDCA6"); mylist.add("\uD83C\uDCB6");
        mylist.add("\uD83C\uDCC6"); mylist.add("\uD83C\uDCD6");
        mylist.add("\uD83C\uDCA7"); mylist.add("\uD83C\uDCB7");
        mylist.add("\uD83C\uDCC7"); mylist.add("\uD83C\uDCD7");
        mylist.add("\uD83C\uDCA8"); mylist.add("\uD83C\uDCB8"); 
        mylist.add("\uD83C\uDCC8"); mylist.add("\uD83C\uDCD8");
        mylist.add("\uD83C\uDCA9"); mylist.add("\uD83C\uDCB9");
        mylist.add("\uD83C\uDCC9"); mylist.add("\uD83C\uDCD9");
        mylist.add("\uD83C\uDCAA"); mylist.add("\uD83C\uDCBA"); 
        mylist.add("\uD83C\uDCCA"); mylist.add("\uD83C\uDCDA");
        mylist.add("\uD83C\uDCAB"); mylist.add("\uD83C\uDCBB"); 
        mylist.add("\uD83C\uDCCB"); mylist.add("\uD83C\uDCDB");
        mylist.add("\uD83C\uDCAD"); mylist.add("\uD83C\uDCBD"); 
        mylist.add("\uD83C\uDCCD"); mylist.add("\uD83C\uDCDD");
        mylist.add("\uD83C\uDCAE"); mylist.add("\uD83C\uDCBE"); 
        mylist.add("\uD83C\uDCCE"); mylist.add("\uD83C\uDCDE");

        // Example string (can be read from file if needed)
        String text = "A B C";

        // The encrypted string
        String encrypted = "";

        // Encrypt
        // Note: You can use "i" instead of using another variable "index"
        for(int i = 0;  i < text.length() ; i++){

            // Get next character from text (or file)
            char symbol = text.charAt(i);

            // Convert character to int
            int ascii = ((int)symbol); 

            //if ascii is between A-Z or a-z display a card
            if( ((ascii >= (int)'A' && ascii <= (int)'Z'))) { 
                encrypted += mylist.get(ascii - 65); 
            } else if(ascii % 2 == 0) { // Using "else if" here makes the code much cleaner
                encrypted += "0"; // Here you should append a character "0" instead of the integer 0
            } else{
                encrypted += "1"; // Here you should append a character "1" instead of the integer 1
            }
        }

        System.out.println("\nYour encrypted message is: \n" + encrypted);
        System.out.println("---------------------------------------------\t");

        // The decrypted text
        String decrypted = "";

        // Decrypting this is a little more difficult for multiple reasons.
        // 1. The cards are 2 character symbols. Meaning we have to check if the next character is a card or not
        // 2. Then, once we know if it is a card or not, we need to take apropriate action
        // 3. Inherently we loose some information while encrypting. Therefore we will never get back the exact same string

        // Storage to store one character if we encounter a card
        String charStore = "";

        // Loop through text
        for(int i = 0; i < encrypted.length(); i++){

            // Get next character
            char nextChar = encrypted.charAt(i);
            if(charStore.length() == 0) {
                // Our character store is empty, so we check what the next character is
                if(nextChar == "0".charAt(0)) {
                    // We found our next character to be a "0". So we convert it to a space
                    // This is where we lost information. we don't know exactly which character was here before
                    decrypted += " ";
                } else if (nextChar == "1".charAt(0)) {
                    // We found our next character to be a "1". So we convert it to a !
                    // This is where we also lost information. we don't know exactly which character was here before
                    decrypted += "!";
                } else {
                    // The character is neither a "0" nor a "1", so it has to be part of a chard, which is 2 characters in length
                    // We store the current character in our storage "charStore"
                    charStore += nextChar;
                }

            } else {
                // Our character store contained at least one character. 
                // So we can safely assume that together with the next character we have a card symbol
                // Concatenate stored and current character
                charStore += nextChar;
                // Search for the card in the list
                // Remember that you subtracted 65 from previously, so we have to add 65 here.
                // Also: You forgot the argument inside the "indexOf" in your code
                decrypted += (char)(mylist.indexOf(charStore) + 65);
                // Reset the character store
                charStore = "";
            }
        }

        System.out.println("\nYour decrypted message is: \n" + decrypted);


    }
}
import java.util.*;
类加密解密{
公共静态void main(字符串[]args){
//将ascii字符转换为卡片的列表
ArrayList mylist=新的ArrayList();
mylist.add(“\uD83C\uDCA1”);mylist.add(“\uD83C\uDCB1”);
mylist.add(“\uD83C\uDCC1”);mylist.add(“\uD83C\uDCD1”);
mylist.add(“\uD83C\uDCA2”);mylist.add(“\uD83C\uDCB2”);
mylist.add(“\uD83C\uDCC2”);mylist.add(“\uD83C\uDCD2”);
mylist.add(“\uD83C\uDCA3”);mylist.add(“\uD83C\uDCB3”);
mylist.add(“\uD83C\uDCC3”);mylist.add(“\uD83C\uDCD3”);
mylist.add(“\uD83C\uDCA4”);mylist.add(“\uD83C\uDCB4”);
mylist.add(“\uD83C\uDCC4”);mylist.add(“\uD83C\uDCD4”);
mylist.add(“\uD83C\uDCA5”);mylist.add(“\uD83C\uDCB5”);
mylist.add(“\uD83C\uDCC5”);mylist.add(“\uD83C\uDCD5”);
mylist.add(“\uD83C\uDCA6”);mylist.add(“\uD83C\uDCB6”);
mylist.add(“\uD83C\uDCC6”);mylist.add(“\uD83C\uDCD6”);
mylist.add(“\uD83C\uDCA7”);mylist.add(“\uD83C\uDCB7”);
mylist.add(“\uD83C\uDCC7”);mylist.add(“\uD83C\uDCD7”);
mylist.add(“\uD83C\uDCA8”);mylist.add(“\uD83C\uDCB8”);
mylist.add(“\uD83C\uDCC8”);mylist.add(“\uD83C\uDCD8”);
mylist.add(“\uD83C\uDCA9”);mylist.add(“\uD83C\uDCB9”);
mylist.add(“\uD83C\uDCC9”);mylist.add(“\uD83C\uDCD9”);
mylist.add(“\uD83C\uDCAA”);mylist.add(“\uD83C\uDCBA”);
mylist.add(“\uD83C\uDCCA”);mylist.add(“\uD83C\uDCDA”);
mylist.add(“\uD83C\uDCAB”);mylist.add(“\uD83C\uDCBB”);
mylist.add(“\uD83C\uDCCB”);mylist.add(“\uD83C\uDCDB”);
mylist.add(“\uD83C\uDCAD”);mylist.add(“\uD83C\uDCBD”);
mylist.add(“\uD83C\uDCCD”);mylist.add(“\uD83C\uDCDD”);
mylist.add(“\uD83C\uDCAE”);mylist.add(“\uD83C\uDCBE”);
mylist.add(“\uD83C\uDCCE”);mylist.add(“\uD83C\uDCDE”);
//示例字符串(如果需要,可以从文件中读取)
String text=“A B C”;
//加密字符串
字符串加密=”;
//加密
//注意:您可以使用“i”而不是使用另一个变量“index”
对于(int i=0;i如果(((ascii>=(int)'A'&&ascii)您是否已经使用调试器单步执行了代码?您是否必须在项目中编写自己的加密算法?因为如果这不是要求,那么它必须是原始的@miketheliar请注意,在读取或写入文件时,您没有指定任何编码。因此默认编码是(最有可能的是平台编码)将被使用,因为这可能不同,您肯定会遇到问题。请尝试指定UTF-8之类的编码,无论您在哪里读取文件或在字符串和字节之间转换。
import java.util.*;

class EncryptDecrypt {

    public static void main(String[] args) {

        // List to convert ascii characters to cards
        ArrayList<String>  mylist = new ArrayList<String>(); 
        mylist.add("\uD83C\uDCA1"); mylist.add("\uD83C\uDCB1");
        mylist.add("\uD83C\uDCC1"); mylist.add("\uD83C\uDCD1");
        mylist.add("\uD83C\uDCA2"); mylist.add("\uD83C\uDCB2");
        mylist.add("\uD83C\uDCC2"); mylist.add("\uD83C\uDCD2");
        mylist.add("\uD83C\uDCA3"); mylist.add("\uD83C\uDCB3");
        mylist.add("\uD83C\uDCC3"); mylist.add("\uD83C\uDCD3");
        mylist.add("\uD83C\uDCA4"); mylist.add("\uD83C\uDCB4"); 
        mylist.add("\uD83C\uDCC4"); mylist.add("\uD83C\uDCD4");
        mylist.add("\uD83C\uDCA5"); mylist.add("\uD83C\uDCB5"); 
        mylist.add("\uD83C\uDCC5"); mylist.add("\uD83C\uDCD5");
        mylist.add("\uD83C\uDCA6"); mylist.add("\uD83C\uDCB6");
        mylist.add("\uD83C\uDCC6"); mylist.add("\uD83C\uDCD6");
        mylist.add("\uD83C\uDCA7"); mylist.add("\uD83C\uDCB7");
        mylist.add("\uD83C\uDCC7"); mylist.add("\uD83C\uDCD7");
        mylist.add("\uD83C\uDCA8"); mylist.add("\uD83C\uDCB8"); 
        mylist.add("\uD83C\uDCC8"); mylist.add("\uD83C\uDCD8");
        mylist.add("\uD83C\uDCA9"); mylist.add("\uD83C\uDCB9");
        mylist.add("\uD83C\uDCC9"); mylist.add("\uD83C\uDCD9");
        mylist.add("\uD83C\uDCAA"); mylist.add("\uD83C\uDCBA"); 
        mylist.add("\uD83C\uDCCA"); mylist.add("\uD83C\uDCDA");
        mylist.add("\uD83C\uDCAB"); mylist.add("\uD83C\uDCBB"); 
        mylist.add("\uD83C\uDCCB"); mylist.add("\uD83C\uDCDB");
        mylist.add("\uD83C\uDCAD"); mylist.add("\uD83C\uDCBD"); 
        mylist.add("\uD83C\uDCCD"); mylist.add("\uD83C\uDCDD");
        mylist.add("\uD83C\uDCAE"); mylist.add("\uD83C\uDCBE"); 
        mylist.add("\uD83C\uDCCE"); mylist.add("\uD83C\uDCDE");

        // Example string (can be read from file if needed)
        String text = "A B C";

        // The encrypted string
        String encrypted = "";

        // Encrypt
        // Note: You can use "i" instead of using another variable "index"
        for(int i = 0;  i < text.length() ; i++){

            // Get next character from text (or file)
            char symbol = text.charAt(i);

            // Convert character to int
            int ascii = ((int)symbol); 

            //if ascii is between A-Z or a-z display a card
            if( ((ascii >= (int)'A' && ascii <= (int)'Z'))) { 
                encrypted += mylist.get(ascii - 65); 
            } else if(ascii % 2 == 0) { // Using "else if" here makes the code much cleaner
                encrypted += "0"; // Here you should append a character "0" instead of the integer 0
            } else{
                encrypted += "1"; // Here you should append a character "1" instead of the integer 1
            }
        }

        System.out.println("\nYour encrypted message is: \n" + encrypted);
        System.out.println("---------------------------------------------\t");

        // The decrypted text
        String decrypted = "";

        // Decrypting this is a little more difficult for multiple reasons.
        // 1. The cards are 2 character symbols. Meaning we have to check if the next character is a card or not
        // 2. Then, once we know if it is a card or not, we need to take apropriate action
        // 3. Inherently we loose some information while encrypting. Therefore we will never get back the exact same string

        // Storage to store one character if we encounter a card
        String charStore = "";

        // Loop through text
        for(int i = 0; i < encrypted.length(); i++){

            // Get next character
            char nextChar = encrypted.charAt(i);
            if(charStore.length() == 0) {
                // Our character store is empty, so we check what the next character is
                if(nextChar == "0".charAt(0)) {
                    // We found our next character to be a "0". So we convert it to a space
                    // This is where we lost information. we don't know exactly which character was here before
                    decrypted += " ";
                } else if (nextChar == "1".charAt(0)) {
                    // We found our next character to be a "1". So we convert it to a !
                    // This is where we also lost information. we don't know exactly which character was here before
                    decrypted += "!";
                } else {
                    // The character is neither a "0" nor a "1", so it has to be part of a chard, which is 2 characters in length
                    // We store the current character in our storage "charStore"
                    charStore += nextChar;
                }

            } else {
                // Our character store contained at least one character. 
                // So we can safely assume that together with the next character we have a card symbol
                // Concatenate stored and current character
                charStore += nextChar;
                // Search for the card in the list
                // Remember that you subtracted 65 from previously, so we have to add 65 here.
                // Also: You forgot the argument inside the "indexOf" in your code
                decrypted += (char)(mylist.indexOf(charStore) + 65);
                // Reset the character store
                charStore = "";
            }
        }

        System.out.println("\nYour decrypted message is: \n" + decrypted);


    }
}