在这个问题的序言中,我要指出,我完全理解编写自己的加密算法的危险,我永远不会使用自制加密来保护除我之外的任何人的数据。
今天,我被分配了一个计算机科学学期的项目,把我们所学到的知识集中到一个程序中。这个程序的部分功能是它可以加密和解密字符串。我们必须自己编写这些加密方法,因此我们不能使用我们正在使用的语言(Java)中内置的任何内容。最后,我们需要避免使用密钥进行加密的任何东西。
现在,在和我的一些同学交谈后,似乎几乎每个人都在使用ROT13或其他类似的方法。因为我是一个卓越的人,而且我不想和其他人一样,我想设计我自己的加密方法。但是,我有点不知道该从哪里开始。那么,有哪些基本的或高级的加密技术呢?
发布于 2011-12-09 11:30:16
之外的密码学感兴趣
这取决于您希望进行何种类型的加密。重要的警告:这个答案仅仅是指向正确的理论方向。我强烈建议你在跳进之前多读一遍--你读得越多,你就越能理解以前的密码是如何被破坏的,并且不会犯同样的错误。
要操作公钥系统,您需要一个陷门函数。不幸的是,维基百科上的建议是非常准确的:
已经提出了几个函数类,很快就很明显地发现陷门函数比最初想象的更难找到。
陷门函数是相当困难的;陷门排列(其中函数的输出和输入集是相同的,因此函数“置换”了集合内的输入)甚至更难。粗略地说,素因式分解问题和离散对数问题是两个“大问题”。机会在这一领域,使用一个现有的将是目前为止最简单的方法。
对称密钥算法是有意可逆的,但是没有一个输入(密钥)被设计成很难逆转。根本的想法是混淆/扩散原理。现代密码技术中常用的技术有置换置换网络和feistel网络。您还应该考虑阅读分组密码工作方式。
尽可能多地阅读。我不喜欢标准的建议“不要设计你自己的密码”。我认为如果人们愿意的话,他们应该尝试一下。但是,我再怎么强调也不为过,要做到正确是多么的困难。由于项目的时间有限,一种技术可能是使用一个现有密码的简单示例,因此:
作为一种教育实践,RC4很容易实现。很久以前(不久前),它被用来保护SSL/WEP通信--有时它仍然被使用,所以您将使用真正的密码。它确实有一些安全问题 -理解这些也将有助于您的一般密码教育。然而,由于您的要求不是绝对的安全,而是更多的学习,我认为这将是理想的。
如果你觉得自己很有野心,而且很懂你的语言,那么AES也不难在欧洲央行模式下实施。FIPS-197是相当可读的,通常以一种可访问的方式解释该算法。
您认为ROT13是一个糟糕的例子是正确的。即使不知道每个字符的偏移量是13位,假设您使用的是ASCII,您只需尝试您的密码的127 (或255用于扩展的ASCII)偏移-文本,直到正确的一个删除。因此,即使没有密钥,解密也是非常简单的。
发布于 2011-12-09 13:33:13
你必须避免使用钥匙的东西?就我个人而言,如果算法不使用密钥,我看不出它是如何称之为“加密”的。
您可以考虑编写自己的简化DES实现。顾名思义,简化的DES (或S- DES )是DES的一个大大简化的版本。它使用了一个10位的键,而且它很简单,可以用铅笔和纸来计算。
本论文是谷歌首个因“简化DES”而畅销的网站。在http://edipermadi.wordpress.com/2008/01/12/simplified-des-simulator/也有一个视觉模拟器。
发布于 2011-12-09 02:20:46
我不想破坏你的乐趣,但你想考虑以下几点:
这是一个以学期为基础的项目,所以你不能(或者应该)在一夜之间回答这个问题。代码本身可能只需要一两天的时间。真正的学习是在给定的约束条件下找到解决方案。
https://security.stackexchange.com/questions/9605
复制相似问题