介绍
争抢的Anagram算法进行加密,通过改变一个字节数组内的字节的位置,使用基于密码的规则。当然,它可以同时适用于字符串或其他类型的数据,我选择了,因为他们是多才多艺的字节数组,可以很容易地转换到/从字符串,也可以很容易地从文件中读取。
我开发的算法,而思考一种方法来克服弱点块CYPHER算法(喜欢的,例如,Rijndael算法,即使用的AES),当cyphering文件。我不知道,如果该算法根据不同的名称已经存在... (如果没有,那么我将有一个更美丽的改变与这个名字)。算法描述
该算法需要两个输入字节数组:cleardata和密码,并返回一个字节数组(称为,从这里输出)。输入字节数组(cleardata)读两次,从(0字节)开始到结束,一次一个字节;在同一时间读取密码,一次一个位,因此,对于每一个字节cleardata,我们必须在相应位的密码(密码字节数组小于的cleardata的,然后我们在循环密码获得相应的位;即,换句话说:在密码位的位置=位置在的cleardata模密码长度的字节,公式中的话:bitpositioninpassword = bytepositionincleardata%password.length;
现在,我们可以开始写输出文件。
虽然在时间读的cleardata第一次,一个字节,该字节添加到输出,如果密码的相应位为1,然后我们再次读取第二次cleardata,一次一个字节,我们添加到输出的字节,如果在相应的密码位为0;(有其他方法可以做到这一点,甚至用一个单一的传球,但这种方法似乎是最容易理解的)。
,输出的第一部分将包含的cleardata字节对应的密码,而第二部分的输出将包含cleardata相应的密码零字节。使用代码
该算法已在这里实现编码和解码功能,可用的字节数组,即,使用扩展:
byte[] mydata; byte[] mypass;
// here: allocate and set or read the two arrays
byte[] myoutput = mydata.Cry_ScrambleByteRightEnc(mypass);
ecode /解码到/从一个字谜,字节经营的两个主要功能,可以发现在下面的代码(Cry_ScrambleByteRightEnc,Cry_ScrambleByteRightDec)。
相同的算法可以很容易地修改动议的cleardata位,而不是字节。输出,当然,不是一个字谜,并进行解码,如果不知道密码,那就更困难,它会运行比原来慢。此实现,看到的的功能Cry_ScrambleBitRightEnc,Cry_ScrambleBitRightDec。{C}
其他用途(加密)
无论如何,一边用字谜的难题,该算法具有某种加密(在我看来)有趣的应用程序。单独服用,它没有提供足够的安全度,因为它不改变cleardata字节,但它只是将它们移动。即使位版本有很大的弱点:第1位的数量在输出在cleardata的是相同的(同样是,当然,真正0位)。但是,比较的惯常的块密码alghoritms的,它适用于整个输入,不只是在16或32个字节的块,这意味着,输入越大,就越难将解码工作(这意味着也将非常微弱在流cyphering,因为流块小)。结合的争夺的Anagram,例如,Rijndael算法可以给出生一个更强大的的CYPHER算法,两种算法相结合的良好功能。
可以经营下列顺序(使用相同的密码,每个操作和使用的每一个输入以下操作的输出),例如,尝试:争夺的的Anagram字节争夺的的Anagram位Rijndael算法争夺的的Anagram位争夺的的Anagram字节
难道是比使用一个简单的Rijndael更强?这个问题是加密分析师。此外,添加更多的安全,也可以把上述操作为一个周期,重复这些操作n次(每次使用以前的输出作为输入),(希望)提供更大的安全与每个重复(也有在执行时间的更大的成本)。历史2011年12月02日 - 首次发布