EOT的Playfair算法解密问题

Playfair algorithm decryption problem with EOT

提问人:Marcel 提问时间:5/2/2021 最后编辑:Marcel 更新时间:5/3/2021 访问量:72

问:

我正在尝试使用 16x16 矩阵实现 playfair 算法。目前,如果没有一对字符可以将自身加密为 ascii 表中的 EOT 字符,我在加密和解密文件时没有问题。

下面是我读取 2 个字符的当前代码:

    ifstream input_file(file);
    ofstream output_file("out_d.txt");

    if (input_file.is_open()) {
        char A, B;

        //get total number of characters in the file
        input_file.seekg(0, input_file.end);
        int length = input_file.tellg();
        input_file.seekg(0, input_file.beg);

        //while (input_file.get(A)) {
        for (int cnt = 0; cnt < length / 2; cnt++) {
            input_file.get(A);
            //if there are 2 same characters in the pair
            if (A == input_file.peek()) {
                B = char(0);
            }
            //if there is a EOT charater ignore it and skip 1 character
            else if (input_file.peek() == char(3) && cnt != (length / 2) - 1) {
                input_file.ignore();
                B = char(3);
            }
            else {
                input_file.get(B);
            }
            //down here is the decryption section
            ...
        }
    }

我要问的是是否可以跳过或更改文件迭代器的位置,因此即使有多个 EOT 字符,我也可以解密整个文件。

C++ 算法 ifstream eof

评论

1赞 rossum 5/3/2021
也许将加密文件视为二进制数据,但您需要单独跟踪大小。解密时转换回文本。
0赞 Marcel 5/3/2021
谢谢你解决了我的问题@rossum

答: 暂无答案