【问题标题】:Very basic encryption program非常基本的加密程序
【发布时间】:2011-12-21 23:57:07
【问题描述】:

我正在创建一个非常基本的加密程序,使用 XOR 来加密用户文件并再次解密。然而,发生的情况是,当我加密时,我得到一长串相同的 6 个字母,而当我尝试解密时它不起作用。谁能发现问题?另外,我想用我自己的基本加密方法替换 XOR,但除了密钥之外保留相同的代码。这可能吗?谢谢!

#include <stdio.h>

int main(int argc, char*argv[])
{
FILE *fp1, *fp2;
char* key;
int c;

key = argv[1];

    if(*key != '\0')
    {
    fp1 = fopen(argv[2],"rb");
        if(fp1 != NULL)
        {
            fp2 = fopen(argv[3],"wb");
            if (fp2 != NULL)
            {
            while((c=getc(fp1)!=EOF))
            {
                if(!*key)key = argv[1];
                c ^=*(key++);

                putc(c, fp2);
            }
            fclose(fp2);
            }
        fclose(fp1);
        }
    }
return 1;
}

【问题讨论】:

  • 你的缩进可以改进;例如:第一个 fopen/fclose 位于不同的缩进,第二对位于相同的缩进 ...
  • 附注:检查argc 并确保您有足够的论据来处理可能是个好主意
  • return 0; 通常用于向操作系统表示成功; return 1; 可能表示失败。您可能需要查看您的返回值。
  • 将修复仅用于我自己工作的缩进我应该在发布之前修改它抱歉! Return 1 将被设置为 0。但是不明白你对 argc 的意思。我的代码不正确吗?
  • 如果您没有提供正确数量(和类型)的参数,您的程序将“爆炸”。试试yourprogram topsecretkey input.txt,不要说在哪里写编码数据。

标签: c encryption file-io xor


【解决方案1】:

检查你的括号:while 应该是

while((c=getc(fp1))!=EOF)

【讨论】:

  • 这就是问题所在,谢谢!我的另一个问题呢?我是否可以编写自己的加密算法并在此代码中替换 XOR?
  • 是的,用你的算法替换你的行c ^= *(key++);,例如:c = youralgo(c, *key++);
  • 非常感谢pmg,非常感谢,事实上其他所有人。从这个网站可以得到很大的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多