我一直在研究C++中的一个基本的字符串加密/解密算法(源码在这里:http://pastebin.com/MLnn8D82)
我的问题是它没有正确解密。加密公式为:
strInput[nPos]=(((strInput[nPos])+(nPos+1))*2);
解密公式是:
strPassword[nPos]=(((strPassword[nPos])-(nPos+1))/2);
当我只使用加法/减法运算符时,它工作得很好。但当我在加密中乘法,在解密中除法时,我得到一个看似随机的字符串输出。
起初我认为这可能是因为密码是在解密之前写入并从文件中检索的,但我试图直接从主函数输出它,结果还是一样的。
分割/乘法字符串有问题吗它以前使用过c样式(char数组)字符串,但我想这可能有所不同。
感谢您的帮助!
编辑:谢谢你到目前为止的回答。我知道这不安全,我不应该用它,我只是为了练习。
而且,这不是记忆问题我在加密阶段尝试过分割而不是乘法,但仍然得到一个随机字符串,而不是原始字符串。
最佳答案
很可能你的乘法运算中有一些字符溢出,这意味着你的除法永远无法恢复原始字符。
另一方面,为什么要自己编写加密算法?如果你想把它用于任何真实的事情,而不仅仅是学习,你最好使用一个由密码学专家编写的库,这个库是已知的安全的。像Keyczar这样的东西是一个好主意,因为它被设计成很难出错(这是很容易做到的,在密码学方面非常微妙)。