我正在编写一个非常非常基本的加密设备。这并不意味着战胜国家安全局,而只是为了好玩。到目前为止,它处理数字很好(它只是乘以一个大的素数)。但是,有没有办法将字母或单词转换为数字,可以将其转换回原始形式(请记住,加密在没有解密的情况下不值得多)?这是迄今为止的代码:
#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);
}
答案 0 :(得分:0)
对于你的问题:有没有办法将一个字母或单词转换成一个数字,可以转换回原来的形式(请记住,加密不值得解密)?
答案看似简单:它叫做字符集/代码页/字符编码 除非您想要更受限制且更节省空间,否则您必须决定支持哪些符号,然后手动为每个符号分配一个数字。
你应该没有问题,因为C char
只是一个小数字。只有一点需要注意:您实际上需要明确unsigned char
或signed 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);
}
(可能有错误。我没有尝试编译它)