Java加密仿射密码错误输出

Java加密仿射密码错误输出,java,encryption,cryptography,output,Java,Encryption,Cryptography,Output,我试图做一个仿射方法,但我的输出是完全错误的,我不知道如何修复它,有人能看看它,告诉我什么是错误的吗 public void Affine(int a, int b){ StringBuilder builder = new StringBuilder(); int len = jMesaj.getText().length(); //length of the input for (int i = 0; i < len; i++){ char cu

我试图做一个仿射方法,但我的输出是完全错误的,我不知道如何修复它,有人能看看它,告诉我什么是错误的吗

public void Affine(int a, int b){
    StringBuilder builder = new StringBuilder();
    int len = jMesaj.getText().length(); //length of the input
    for (int i = 0; i < len; i++){
        char currentChar = jMesaj.getText().charAt(i);
        char finalChar = ((char)(currentChar +(a*i + b)% 26));
        builder.append(finalChar);
    }
    String result = builder.toString();
    builder.delete( 0 , builder.length() -1 );

    jEncryptionResult.setText(result); //display result in jTextArea 
}
public void仿射(int a,int b){
StringBuilder=新的StringBuilder();
int len=jMesaj.getText().length();//输入的长度
对于(int i=0;i
在我看来,你似乎在假设‘A’=1,‘B’=2,等等。同样,结果也略有不同。若你们使用26作为模块,那个么我觉得你们是在从“A”到“Z”进行加密。如果这是真的,那么尝试在这一行中添加偏移量,如下所示:

char finalChar = (char)((a*(currentChar - 'A') + b) % 26 + 'A');

在我看来,你是在假设‘A’=1,‘B’=2,等等。同样,结果也略有不同。若你们使用26作为模块,那个么我觉得你们是在从“A”到“Z”进行加密。如果这是真的,那么尝试在这一行中添加偏移量,如下所示:

char finalChar = (char)((a*(currentChar - 'A') + b) % 26 + 'A');

字符是介于0-65536(2字节,2^16)之间的值。Unicode的东西有点乱,至少如果你想在你的seçret cömmünìcåtiön中使用esötéric hårä字符

如果您事先知道字母表,那么使用

String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
char[] alphabet = str.toCharArray(); //make sure it's sorted for binarySearch to work!
然后通过
java.utils.Array.binarySearch(alphabet,char)
查找传入字符的位置,对返回的
int
数组位置进行数学运算(以
字母表的长度为模)然后从这个位置查找加密的信件,将其放入您的out消息
StringBuilder


您还可以创建两个
哈希映射,一个用于加密,另一个用于解密。

字符的值介于0-65536(2字节,2^16)之间。Unicode的东西有点乱,至少如果你想在你的seçret cömmünìcåtiön中使用esötéric hårä字符

如果您事先知道字母表,那么使用

String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
char[] alphabet = str.toCharArray(); //make sure it's sorted for binarySearch to work!
然后通过
java.utils.Array.binarySearch(alphabet,char)
查找传入字符的位置,对返回的
int
数组位置进行数学运算(以
字母表的长度为模)然后从这个位置查找加密的信件,将其放入您的out消息
StringBuilder

您还可以创建两个哈希映射,一个用于加密,另一个用于解密。

/** *类别:仿射密码子 * *@作者:甲骨文 * *写于:2013年8月26日晚上9:01:28 * *编译器:NetBeans 7.3.1 * *平台:Windows7Ultimate */

包装之谜

公共类仿射密码子{

public String Encryption(String plainText, int a , int b){

     StringBuilder builder = new StringBuilder();
     int len = plainText.length();

    for (int i = 0; i < len; i++){

       char currentChar = plainText.toUpperCase().charAt(i);

       int IntcurrentChar = (int) currentChar - 65;

       int finalCharInt = (a* IntcurrentChar + b) % 26;

       int FinalCharint = finalCharInt + 65;

       char finalChar = (char) FinalCharint;

       builder.append(finalChar); 
    }
        String result = builder.toString().toLowerCase();



    return result;

}//end String Encryption

public String Encrypt(String plainText, int a, int b ){

    int len = plainText.length();
             StringBuilder sb = new StringBuilder();

             String alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

             for(int i = 0 ; i < len ; i++){

             int charPos = alphabet.indexOf(plainText.charAt(i));
             /*
              *Read the character from input and get the position of the it in string
              */
             int keyVal = (a* charPos+b) % 26; 

             /*
              * keyVal store the position of the character that replace the one from the input
              */
             char finalChar = alphabet.charAt(keyVal);

             sb.append(finalChar);

            }
             String result = sb.toString();

return result;   

}
公共字符串加密(字符串明文、int a、int b){
StringBuilder=新的StringBuilder();
int len=纯文本.length();
对于(int i=0;i
/** *类别:仿射密码子 * *@作者:甲骨文 * *写于:2013年8月26日晚上9:01:28 * *编译器:NetBeans 7.3.1 * *平台:Windows7Ultimate */

包装之谜

公共类仿射密码子{

public String Encryption(String plainText, int a , int b){

     StringBuilder builder = new StringBuilder();
     int len = plainText.length();

    for (int i = 0; i < len; i++){

       char currentChar = plainText.toUpperCase().charAt(i);

       int IntcurrentChar = (int) currentChar - 65;

       int finalCharInt = (a* IntcurrentChar + b) % 26;

       int FinalCharint = finalCharInt + 65;

       char finalChar = (char) FinalCharint;

       builder.append(finalChar); 
    }
        String result = builder.toString().toLowerCase();



    return result;

}//end String Encryption

public String Encrypt(String plainText, int a, int b ){

    int len = plainText.length();
             StringBuilder sb = new StringBuilder();

             String alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

             for(int i = 0 ; i < len ; i++){

             int charPos = alphabet.indexOf(plainText.charAt(i));
             /*
              *Read the character from input and get the position of the it in string
              */
             int keyVal = (a* charPos+b) % 26; 

             /*
              * keyVal store the position of the character that replace the one from the input
              */
             char finalChar = alphabet.charAt(keyVal);

             sb.append(finalChar);

            }
             String result = sb.toString();

return result;   

}
公共字符串加密(字符串明文、int a、int b){
StringBuilder=新的StringBuilder();
int len=纯文本.length();
对于(int i=0;i