65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简单的 32 位块文件加密应用程序

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.71/5 (5投票s)

2007 年 6 月 16 日

2分钟阅读

viewsIcon

47256

downloadIcon

950

使用伪随机位旋转和异或运算,对 32 位整数块进行文件加密/解密。

Screenshot - x0r1.png

引言

我想这无需多言,但我还是说一下:我意识到存在许多比我在这里展示的加密算法更优越。但这并非此应用程序的目的。此应用程序的目的是向潜在的加密爱好者展示,在不诉诸极端数学复杂性的情况下,开发一个非常简单的加密应用程序的可能性。

它是如何工作的?

代码分为两个主要部分:一个用于加密,另一个用于解密。每个部分都由一个 while 循环组成,该循环从用户指定的文件中每次循环读取 4 个字节,以形成一个 32 位无符号整数数据块。然后,该 32 位无符号整数数据块与一个伪随机无符号整数值进行异或运算,该值由一个或多个密钥进行种子填充,然后向左或向右进行伪随机方向和大小的旋转。此过程一直持续到文件末尾。如果发现文件大小不能被 4 整除,此应用程序将使用对 24 位、16 位或 8 位无符号整数数据块执行计算的方法。

以下程序以编程方式演示了加密 4 字节块的过程

// Main loop for encrypting a file


    while((a = fgetc(in)) != EOF && (b = fgetc(in)) != 
        EOF && (c = fgetc(in)) != EOF && (d = fgetc(in)) != EOF)
    {
        polarity = rand()%2;
        magnitude = rand()%32;
        block = ((d<<24) | (c<<16) | (b<<8) | a);
        block ^= ((rand()%256<<24) | (rand()%256<<16) | 
                (rand()%256<<8) | rand()%256);
        if (polarity) block = ROTL32(block,magnitude);
        else block = ROTR32(block,magnitude);
        putc(block,out);
        putc(block=block>>8,out);
        putc(block=block>>8,out);
        putc(block=block>>8,out);
    }

以下以可视化的方式演示了上述代码的行为

使用程序

该程序最初设计为在 Windows 操作系统上运行。要加密或解密一组文件,首先选择要加密/解密的文件,然后将它们拖到可执行文件中。程序将启动,并将您刚刚拖放的文件作为“命令行参数”接受。如果操作正确,您选择的文件将出现在列表中。然后,您可以指定一组介于 0 和 4292870144 之间的整数值作为伪随机数生成器的种子密钥。一旦您指定了一组密钥,系统将询问您是否要加密或解密所选文件。请相应选择。

注意:要解密文件,必须以相反的顺序指定密钥集。

历史

  • 2007 年 6 月 16 日 -- 发布原始版本
  • 2007 年 6 月 25 日 -- 更新下载
© . All rights reserved.