我刚刚用一个简单的C代码进行了加密。加密的工作方式如下:“您的应用程序应该读取用户输入的4位整数,并将每个数字替换为将7加到该数字,并在新值下降10之后得到剩余的数字:假设我输入了1234,加密后的值将是8,9,0,1。
我正在使用以下代码进行加密:
num1 = ((digits/1000) + 7) % 10;
num2 = ((digits/100) + 7) % 10;
num3 = ((digits/10) + 7) % 10;
num4 = ((digits/1) + 7) % 10;现在我想做一个解密,得到我输入的值。我想知道我能不能做一个反向模组?%的反向计算?意思是如果a=3+ 4,a= 7.所以,7=b+4,是b= 7-4。我
到目前为止,我尝试的是:
dNum1= (digits/1000) % 10;
dNum2= (digits/100) %10;
dNum3= (digits/10) %10;
dNum4= (digits % 10) ;现在的问题是:如何从解密值(8,9,0,1)中检索原始值?(原值:1234)
发布于 2015-12-03 14:28:55
因为你通过加7来编码每一个数字,所以你需要通过减去7来解码。如果值是负值,那么添加10就可以得到预期的值。
num1 = (digits/1000) - 7;
num2 = (digits/100) - 7;
num3 = (digits/10) - 7;
num4 = (digits % 10) - 7;
if (num1 < 0) num1+=10;
if (num2 < 0) num2+=10;
if (num3 < 0) num3+=10;
if (num4 < 0) num4+=10;编辑:
更好的是,您可以添加3,然后乘以10,这样做也是一样的。感谢psmears提出这个建议。
num1 = ((digits/1000) + 3) % 10;
num2 = ((digits/100) + 3) % 10;
num3 = ((digits/10) + 3) % 10;
num4 = ((digits/1) + 3) % 10;EDIT2:
如果要直接从编码数字转换解码数字,而不首先将值移回digits,请执行以下操作:
dNum1 = (num1 + 3) % 10;
dNum2 = (num2 + 3) % 10;
dNum3 = (num3 + 3) % 10;
dNum4 = (num4 + 3) % 10;发布于 2015-12-03 15:04:33
这是一个有趣的问题@堆栈。我看到的一件事是,您正在使用单个语句将值赋值给num1、num2、num3、num4。
但是每次加密都遵循一个定义的模式,隐含的是每次解密都会执行。
如果你成功地找到了这样的模式(,我更喜欢说神秘!),那么这种加密就快解决了!
因此,我决定找到模式,我成功地找到了它的加密。如果您找到模式,for loop非常有用,可以重复这个过程,从而对给定的编号进行编码。(解码也一样)
备注:我不知道您是否需要这样的解决方案,但是这更有用,因为变量的数量较少,这是任何好程序的一个特点。这个代码只适用于4位数字..。如果你想把它扩展到n个数字,请随便问我:)
所以!这是我的代码:
#include<stdio.h>
#include<math.h>
int main()
{
//encryrption
int num,num1,i,e=0,d=0;
printf("enter 4 digit number:\n");
scanf("%d",&num);
num1=num;
for(i=3;i>=0;i--)
{
num1=(num)/(pow(10,i));
num1=(num1+7)%10;
e=(10*e)+num1;
}
printf("encryption = %d\n",e);
//decryption:
for(i=3;i>=0;i--)
{
num1=e/pow(10,i);
num1=((num1-7)%10);
d=(10*d)+num1;
}
printf("decryption = %d",d);
return 0;
}https://stackoverflow.com/questions/34068488
复制相似问题