Ceasar Cipher In C在100次迭代中未正确输出

时间:2017-10-25 18:29:56

标签: c encryption ascii

我正在上课,所以我更愿意帮助你解决这个问题,或者更倾向于指出正确的方向,而不仅仅是给我一个答案。据说我的程序基于Ceasar Cipher加密字符串(这绝不是安全的,它只是一个简单的程序)。当它通过编码和解码运行时,结果是找到并且从不会有任何问题,假设通过次数(或者我加密它的次数)小于100.当编码和解码超过100遍时,我得到一个不同的字符串比我预期的编码输出,我的解码只输出一个字符(第一个)。

这是代码并注意到输出不在正常的ascii范围内,因为这是分配要求的。

enum CODE_METHOD {ENCODE, DECODE};  
int mystrlen(const unsigned char *string)
{
  int length = 0;
  int index;

  for(index = 0;*(string+index) != 0; index++)
    length++;

  return length;
}

void jumble(unsigned char *string, 
            const unsigned char *password, 
            enum CODE_METHOD method, 
            int passes)
{
  int index, index_2;
  int len = mystrlen(password);

  for(index_2 = 0; index_2 < passes; index_2++)
    for(index=0; *(string+index) != '\0'; ++index )
      *(string+index) += (method == ENCODE) ?   *(password+(index % len)) 
                                            : - *(password+(index % len));
}

此处还有一个示例驱动程序,可以调用此

#include <stdio.h>  /* printf, putchar                  */
#include "jumble.h" /* mystrlen, jumble, ENCODE, DECODE */

void test_stress(int passes)
{
  unsigned char phrase[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  unsigned char *password = (unsigned char*) "rumpelstiltskin";
  size_t length = sizeof(phrase);
  size_t i;

  printf("\nStress ======================================\n");
  printf("Original phrase:\n");
  printf("%s\n", phrase);
  jumble(phrase, password, ENCODE, passes);

  printf("\nEncoded phrase:\n");
  for (i = 0; i < length; i++)
    putchar(phrase[i]);

  jumble(phrase, password, DECODE, passes);
  printf("\nDecoded back:\n");
  printf("%s\n", phrase);
}

int main(void)
{
  test_stress(100);
  return 0;
}

以下是上述驱动程序的预期输出:

Stress ======================================
Original phrase:
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Encoded phrase:
Éö×¹v3˜Mz›8RGØæÈ…B§\‰ª 
Decoded back:
ABCDEFGHIJKLMNOPQRSTUVWXYZ

收到的输出

Stress ======================================
Original phrase:
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Encoded phrase:
É Ñä£Îù ¿ÒþÏÄãPD ³  ÇÈ 
Decoded back:
A

我想再次指出正确的方向

谢谢!

0 个答案:

没有答案