如果您通常对项目之外的密码学感兴趣:
这取决于您希望执行哪种类型的加密。巨大的警告:这个答案只是为你指出正确的理论方向。我强烈建议在开始之前做大量阅读 - 你阅读的越多,你就会越了解以前的密码是如何被破解的,并且不会犯同样的错误。
公钥
要操作公钥系统,您需要一个陷门功能。不幸的是,维基百科上的建议非常准确:
已经提出了几个函数类,很快就发现陷门函数比最初想象的更难找到
活板门功能非常困难。陷门置换(函数的输出和输入集相同,因此函数“置换”集合内的输入)甚至更难。粗略地说,素数分解问题和离散对数问题是两个“大问题”。在这个领域有机会,使用现有的将是迄今为止最简单的方法。
对称密钥
对称密钥算法是故意可逆的,但没有一个输入(密钥)被设计为很难逆转。基本思想是混淆/扩散原理。现代密码中的常用技术包括替换置换网络和feistel 网络。您还应该考虑阅读分组密码操作模式。
对,很好,我应该从哪里开始?
通过阅读 - 尽可能多地阅读。我不喜欢“不要设计自己的加密货币”的标准建议。我认为人们应该尝试,如果他们愿意。但我不能足够强调要做到正确是多么困难。由于您的项目时间有限,一种技术可能是使用现有密码的简单示例,因此:
为您的项目
作为一项教育练习, RC4很容易实现。曾几何时(不久前),它被用来保护 SSL/WEP 流量 - 有时它仍在使用,因此您将使用真正的密码。它确实存在一些安全问题- 了解这些问题也将帮助您进行一般的加密教育。但是,由于您的要求是更少的绝对安全性和更多的学习,我认为这将是理想的。
如果你很有野心并且很了解你的语言,那么在 ECB 模式下实现 AES 也不是那么难。FIPS-197可读性很强,通常以相当容易理解的方式解释算法。
您认为 ROT13 是一个糟糕的例子是对的。即使不知道每个字符的偏移量是 13 个位置,假设您使用 ASCII,您只需尝试密文的 127 个(或扩展 ASCII 的 255 个)偏移量中的每一个,直到正确的一个丢失。因此,即使没有密钥,解密它也很简单。