我正在上课,所以我更愿意帮助你解决这个问题,或者更倾向于指出正确的方向,而不仅仅是给我一个答案。据说我的程序基于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
我想再次指出正确的方向
谢谢!