4

このビデオに従って、簡単な暗号化と復号化の方法を作成 ました。 ?」チュートリアルでは発生していないようですが、彼のキャラクターの一部が大幅に増加しています。では、なぜこれが起こるのですか?ところで、ここに私のプログラムの関連部分があります:

public class crypt {
public String encrypt(String pass){
        String cryppass_string="";
        int l= pass.length();
        char ch;
        for (int i=0; i<l; i++){
            ch= pass.charAt(i);
            ch+= 12;
            cryppass_string+= ch;
        }
        return cryppass_string;
    }

    public String decrypt (String cryppass_string){
        String pass_string= "";
        int l= cryppass_string.length();
        char ch;
        for (int i=0; i<l; i++){
            ch= cryppass_string.charAt(i);
            ch-= 12;
            pass_string += ch;              
        }
        return pass_string;
    }
}

例を次に示します。パスワード (「astu」) を暗号化する必要があるため、入力すると、次のようになります。

 char[] newpass= newPassField.getPassword();
        char[] repass= rePassField.getPassword();
        if(Arrays.equals( newpass , repass ))
        {
            if(number==1)
            {

            Login_info.McIntosh_custom_pwd= fileob.string_to_char(cryptob.encrypt(fileob.char_to_string(newpass)));
            fileob.evr_tofile();
            }

別のクラスでは、McIntoshcrypted が次のように宣言されています。

McIntosh_custom_pwd= fileob.string_to_char(cryptob.decrypt(FileData[0]));

fileob はクラス Files のオブジェクトです

cryptob はクラス crypt のオブジェクトです

public class Files {

File f= new File("Eng Dept.txt");
public Formatter x;


public void openfile(){ 
try{
    x= new Formatter ("Eng Dept.txt");

}
catch (Exception error){
    System.out.println("error");
}
    }

public void writing(String towrite){
try{    
String filename= "Eng Dept.txt";
String newLine = System.getProperty("line.separator");
FileWriter fw = new FileWriter(filename,true);
fw.write(towrite);
fw.write(newLine);
fw.close();
    }
catch (Exception eror){
    System.out.println("error");
                        }
}

public String reading_string(int linenum){
    String readline= "";
    String filename= "Eng Dept.txt";
    int lineno;
    try{
        FileReader fr= new FileReader(filename);
        BufferedReader br= new BufferedReader(fr); 
        for (lineno=1; lineno<= 1000; lineno++){
                if(lineno== linenum){
                    readline= br.readLine();
                                    }
                else 
                    br.readLine();
                                            }
        br.close();
        }
        catch (Exception eror){
            System.out.println("error");    
    }
    return readline;
}

public String char_to_string(char[] toconv){
    int l= toconv.length;
    String converted= "";
    for (int i=0; i<l; i++)
    {
        converted+= toconv[i];
    }
    return converted;
}

public char[] string_to_char(String toconv){
    int l= toconv.length();
    char[] converted = new char[l];
    for (int i= 0; i<l; i++)
    {
        converted[i]=toconv.charAt(i);
    }
    return converted;
}

public void evr_tofile()
{
    f.delete();
    openfile();
    writing(char_to_string(Login_info.McIntosh_custom_pwd));

     }

txtファイルの「as??」が見られ、その結果

System.out.print(Login_info.McIntosh_custom_pwd);

「as33」です。これを正しく説明したことを願っています...

編集:試した解決策

public String encrypt(String pass){
        String cryppass_string="";
        int l= pass.length();
        int x=0;
        char ch;
        for (int i=0; i<l; i++){
            ch= pass.charAt(i);
            x= ((ch - 32) + 12) % 126 + 32;
            ch = (char)x;
            cryppass_string+= ch;
        }
        return cryppass_string;
    }

    public String decrypt (String cryppass_string){
        String pass_string= "";
        int l= cryppass_string.length();
        int x=0;
        char ch;
        for (int i=0; i<l; i++){
            ch= cryppass_string.charAt(i);
            x= ch-32;
            ch= (char)x;
            if (ch < 0)
                x= ch+126;
            ch= (char)x;
            x= ch-12+32;
            ch= (char)x;
            pass_string += ch;              
        }
        return pass_string;
    }
4

1 に答える 1

1

印刷できない文字を に変換する操作を使用して、値をテキスト ファイル (Web ページ?) に出力すると推測しています?。印刷可能な文字のみを出力するように暗号化を制限する必要があります。これを行う 1 つの方法は、モジュラー演算を使用して、暗号化された文字が印刷可能なセット (ASCII 32 から ASCII 126) 内にあることを確認することです。バイナリを読み書きする場合、コードは適切に変換されますが、ASCII テキストとして出力する場合は変換されません。

暗号化する

ch = (char)((ch - 32) + 12) % 126 + 32; // extended expression to show rebasing/modulus

復号化

ch = ch - 32;
if (ch < 0) ch = ch + 126;
ch = ch - 12 + 32;
于 2012-12-09T16:00:23.663 に答える