1

こんにちは、テキストを暗号化して textView に表示し、SMS として送信するコードがあります。

アルゴリズムは (letterInt * 定数)%29 = new letterInt です。

したがって、基本的には、文字値に定数を掛けた29の除算の残り物です

アルファベットはこんな感じ

private List<Character> alfabet = new ArrayList<Character>();
    alfabet.add('a');
    alfabet.add('b');
    alfabet.add('c');
    alfabet.add('d');
    alfabet.add('e');
    alfabet.add('f');
    alfabet.add('g');
    alfabet.add('h');
    alfabet.add('i');
    alfabet.add('j');
    alfabet.add('k');
    alfabet.add('l');
    alfabet.add('m');
    alfabet.add('n');
    alfabet.add('o');
    alfabet.add('p');
    alfabet.add('q');
    alfabet.add('r');
    alfabet.add('s');
    alfabet.add('t');
    alfabet.add('u');
    alfabet.add('v');
    alfabet.add('w');
    alfabet.add('x');
    alfabet.add('y');
    alfabet.add('z');
    alfabet.add('æ');
    alfabet.add('ø');
    alfabet.add('å');

問題は、C が 1 より大きくなるたびに、テキストが適切に暗号化されないことです。たとえば、d = 4 ですが、C = 4 を選択すると、出力は p (16) ではなく h (8) になります。

コード部分は次のようになります。

        char[] bogstaver = tekstString.toCharArray();
        for (int i = 1; i <= bogstaver.length; i++) {
            if (bogstaver[i-1] == ' ' || bogstaver[i-1] == '.' || bogstaver[i-1] == '?' || bogstaver[i-1] == '!' ||
                    bogstaver[i-1] == ',' || bogstaver[i-1] == ';' || bogstaver[i-1] == '+' || bogstaver[i-1] == '(' || 
                    bogstaver[i-1] == ')' || bogstaver[i-1] == '{' || bogstaver[i-1] == '}' || bogstaver[i-1] == ':'){
                    continue;   
            }

            if( CType == 1){
                C = Integer.valueOf(faktorA);
                CType = 2;
            }
            else if (CType == 2){
                C = Integer.valueOf(faktorB);
                CType = 3;
            }
            else if (CType == 3){
                C = Integer.valueOf(faktorE);
                CType = 1;
            }

            bogstaver[i-1] = alfabet.get((alfabet.indexOf(bogstaver[i-1]) * C)%29);
        }
        String endeligeTekst = new String(bogstaver);
        if (k == 1){
            krypteredeTekst.setText(endeligeTekst);
        }
        else{
            sendString(endeligeTekst, Nr);
        }
4

1 に答える 1

1

これが、期待する結果が得られない理由です。

eはリストの 4 番目の値です (インデックスが 0a=0など) b=1

を使用C=3すると、結果は 4*3=12 になり、13 番目の文字 (インデックス 12) が出力になります (質問にあるmように取得できません)。n

于 2013-05-11T12:30:12.083 に答える