char转换后如何读取和打印字符串的整个输入?

时间:2015-09-22 01:28:39

标签: java encryption aes

我有一个方法可以循环移动给定输入字符串中的行 以下列方式移动每个块中的行。第一行保持不变。将第二行向左移动一个位置。将第三行向左移动两个位置。最后,将第四行向左移动三个位置。

我得到了正确的移动,但它只打印前16个字符......任何建议?输出应该是4x4块。已经尝试将for循环的长度切换为" inputStr.substring"整个字符串,但有错误

这就是我的......

public static String shiftRows(String str, int shiftNum)
    {
        char[] out = new char[4];
        if(shiftNum==1)
        {
            out[0]=str.charAt(1);
            out[1]=str.charAt(2);
            out[2]=str.charAt(3);
            out[3]=str.charAt(0);
        }
        if(shiftNum==2)
        {
            out[0]=str.charAt(2);
            out[1]=str.charAt(3);
            out[2]=str.charAt(0);
            out[3]=str.charAt(1);
        }
        if(shiftNum==3)
        {
            out[0]=str.charAt(3);
            out[1]=str.charAt(0);
            out[2]=str.charAt(1);
            out[3]=str.charAt(2);
        }
        return new String(out);
    }
public static void main(String[] args)
    {
    System.out.println("SHIFT ROWS: " );
        System.out.println();

    String[] input= new String[4];

    String[] output= new String[4];

    String inputStr = "WVOGJTXQHUHXICWYYMGHTRKQHQPWKYVGLPYSPWGOINTOFOPMO";

    for (int i = 0, n = 0; i < 4; i++, n+=4) {
        input[i] = inputStr.substring(0+n, 4+n);
    }

    output[0] = input[0];
    for(int i=1; i<4; i++)
    {
        output[i] = shiftRows(input[i],i);
    }

    for(int i=0; i<4; i++)
    {
        System.out.println(output[i]);
    }

我的输出:

SHIFT ROWS: 

WVOG
TXQJ
HXHU
YICW

我想要的输出:

WVOG
TXQJ
HXHU
YICW

YMGH
RKQT
PWHQ
GKYV

LPYS
WGOP
TOIN
MFOP

OAAA
AAAA
AAAA
AAAA

1 个答案:

答案 0 :(得分:1)

假装shiftRows(s,0)只返回s(我真的这样做)。然后你将输出[i]设置为shiftRows(input [i],i)为i 0..3。 shiftRows总是返回一个4个字符的字符串,因此输出的所有元素都是一个4个字符的字符串,你只需要输出一次输出的所有元素,这样就可以按预期获得4个,4个字符的字符串。 / p>

另外,当你切断inputStr时,请考虑n。它增加4 4次(每次i增加1次,发生4次),所以它只从0到16,所以你也只消耗前16个字符inputStr。

我认为你想要将for循环分解为内部和外部循环。外部将消耗(比喻地,没有理由实际提取字符)来自inputStr的16个字符的块,并且内部循环将那些16分成4个4组,移位它们并打印它们。 / p>