好,
我觉得这句话:
while( (ch=fgetc(fr))==EOF) // Also, Similar statements that you have used many times.
您正在从文件中读取1个字符并将其与之进行比较 EOF 。这很好,直到你正在使用普通的文本文件。
EOF
但在这里你正在使用加密文件, file.enc 它可以包含任何东西。 它甚至可以拥有 EOF 字符本身作为数据内容。
file.enc
这意味着如果文件有100个字符,第二个字符是 EOF 那么它将终止于第二个角色本身。
我觉得这是一个可能的问题。
仍然是..其他问题 - 我建议使用 fprintf() 代替 fputs() ,这些都很容易使用,因此避免了看不见的错误。因为您在逻辑上处理字符串而不是字符。
fprintf()
fputs()
此外,使用这些,您还可以在需要时获得字符串格式的优势。
试试然后回来.. :)
如果不对软件进行一些其他更改,这甚至可能无法实现。看起来您的函数不允许生成的加密数据大于未加密的数据,这对RSA来说是必需的。
传递给你的函数的关键也会大不相同; RSA密钥的一侧将由模数和指数组成。模数将是一个大数(不能用普通整数类型表示),并且指数通常对于一侧是大数而对于另一侧是(相对)小的。
除此之外,RSA还存在许多问题和困难。您可以尝试自己处理这些问题,但是使用像OpenSSL这样的现有库可能会更好。其中一些问题包括:
首先,您需要使加密函数能够返回比您提供的数据更多的数据。那么你应该考虑使用加密库来进行实际加密,以节省大量工作并减少让漏洞漏掉的可能性。