无法通过加密上的黑客等级挑战来加密加密技术

时间:2015-11-12 19:15:31

标签: encryption

我正在做一些黑客排名问题,我无法弄清楚挑战细节中的加密方法是什么,here is the challenge.

摘自挑战:

  

通过在列中显示字符,插入空格,然后显示下一列并插入空格等来获取编码消息。例如,上述矩形的编码消息是:

imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau

没有提及角色如何更改为挑战提供的输出示例...

我理解这个问题的所有要素。对我来说问题是:在网格中存储文本之后,没有关于字母如何加密的挑战的细节。

也许我对加密技术非常不熟悉,如果我更精通,我可以从示例输出中识别出一些简单的加密模式。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

请像这样阅读(连接标记的字母):

i m tgdvs f e arwer m a yoogo a n ouuio n t nnlvt w t tddes a o hghn s s eoau

然后回到开头,从每个单词中取出第二个字母,依此类推。

IfManWas MeantToS ...

答案 1 :(得分:0)

问题中描述的方法是删除空格并打孔。然后计算行和列,并创建一个多维多维矩阵。遍历将字符存储在矩阵中的字符串。然后反转矩阵并创建最终字符串。

static String encryption(String s) {

    String S = s.replace(" ", "");

    int L = S.length();
    int tryRow = (int) Math.floor(Math.sqrt(L));
    int row;
    int col = (int) Math.ceil(Math.sqrt(L));
    if (tryRow * col < L) {
        row = tryRow + 1;
    } else {
        row = tryRow;
    }
    char[][] matrix = IntStream.range(0, L).collect(
            () -> new char[row][col],
            (acc, i) -> {
                int r = i / col;
                int c = i - (r * col);
                acc[r][c] = S.charAt(i);
            },
            (a, b) -> {
            });
    char[][] temp = new char[col][row];
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix[i].length; j++) {
            temp[j][i] = matrix[i][j];
        }
    }
    return Arrays.stream(temp)
            .map(arr -> String.valueOf(arr).trim())
            .collect(Collectors.joining(" "));
}