想在加密程序中实现字母

时间:2014-04-14 01:21:04

标签: c encryption


我正在编写一个非常非常基本的加密设备。这并不意味着战胜国家安全局,而只是为了好玩。到目前为止,它处理数字很好(它只是乘以一个大的素数)。但是,有没有办法将字母或单词转换为数字,可以将其转换回原始形式(请记住,加密在没有解密的情况下不值得多)?这是迄今为止的代码:

#include<stdio.h>
int main(){
int x,y,z;
int encrypt_number[] = {7507,55529,77933,142867,392263};
printf("\tCaleb's encryption machine\n\n");
printf("Please enter your number\n");
scanf("%d",&x);
printf("Enter your encryption key number between one and five\n");
scanf("%d",&y);
if (y == 1)
y = encrypt_number[0];
else if ( y == 2 )
y = encrypt_number[1];
else if ( y == 3 )
y = encrypt_number[2];
else if ( y == 4 )
y = encrypt_number[3];
else if ( y == 5 )
y = encrypt_number[4];
else
printf("not a valid option\n");
z = x*y;
printf("Your encrypted, safer than average, number is: %d\n",z);
}

3 个答案:

答案 0 :(得分:0)

对于你的问题:有没有办法将一个字母或单词转换成一个数字,可以转换回原来的形式(请记住,加密不值得解密)?

答案看似简单:它叫做字符集/代码页/字符编码 除非您想要更受限制且更节省空间,否则您必须决定支持哪些符号,然后手动为每个符号分配一个数字。

你应该没有问题,因为C char只是一个小数字。只有一点需要注意:您实际上需要明确unsigned charsigned char,否则实施会为您决定。
查看<stdlib.h> - 标题以进行字符集转换 作为参考,请使用C99 with Technical corrigenda TC1, TC2, and TC3 included

答案 1 :(得分:0)

是的,将字母从ascii转换为十进制。

char c='B';
int decimalRep=c;
printf("The char. %c in Decimal is:%i",c,decimalRep);

输出:char。十进制的B是:66

答案 2 :(得分:0)

玩了一下。想出了这个:

#include <stdio.h>
#include <errno.h>

int encrypt(
      int  I__value,
      int  I__key,
      int *_O_valueEncrypted
      )
   {
   int rCode=0;
   int encrypt_number[] = {7507,55529,77933,142867,392263};

   if((I__key < 1) || (I__key > 5))
      {
      rCode = ERANGE;
      goto CLEANUP;
      }

   *_O_encryptedValue = I__value * encrypt_number[I__key-1];

CLEANUP:     

   return(rCode);  
   }

int main()
   {
   char inputBuffer[255+1];  

   printf("\tCaleb's encryption machine\n\n");
   printf("Please enter your message to encrypt:\n");
   fgets(inputBuffer, sizeof(inputBuffer), stdin);

   printf("Enter your encryption key number between one and five\n");
   scanf("%d", &y);

   printf("Your encrypted, safer than average, message = \"");
   for(i=0; i<strlen(inputBuffer); ++i)
      {
      int y,z;

      rCode=encrypt(inputBuffer[i], y, &z);
      switch(rCode)
         {
         case 0: 
            break;

         case ERANGE:    
            fprintf(stderr, "Key number is out of range.\n");
            goto CLEANUP;
         }

      printf("%s%d", i ? "," : "", z);
      }

   printf("\"\n");

   return(0);
   }

(可能有错误。我没有尝试编译它)