解密——取回拆分后的数字 C编程
Decryption - Get back the number after splitting C programming
我刚刚使用简单的 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
)
由于您通过加 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,然后 mod 加 10,效果相同。感谢 psmears 的建议。
num1 = ((digits/1000) + 3) % 10;
num2 = ((digits/100) + 3) % 10;
num3 = ((digits/10) + 3) % 10;
num4 = ((digits/1) + 3) % 10;
编辑 2:
如果您直接从编码数字翻译解码数字而不先将值移回 digits
,请执行以下操作:
dNum1 = (num1 + 3) % 10;
dNum2 = (num2 + 3) % 10;
dNum3 = (num3 + 3) % 10;
dNum4 = (num4 + 3) % 10;
这是一个有趣的问题@stack。我看到的一件事是您正在使用单独的语句为 num1
、num2
、num3
、num4
赋值
but every encryption follows a defined pattern and implicit is that
every decryption does
如果你成功找到这样的模式(我更喜欢说神秘!),那么这种加密就接近解决了!
所以我决定找到这个模式,我成功地找到了它用于你的加密。那些你找到的模式,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;
}
我刚刚使用简单的 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
)
由于您通过加 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,然后 mod 加 10,效果相同。感谢 psmears 的建议。
num1 = ((digits/1000) + 3) % 10;
num2 = ((digits/100) + 3) % 10;
num3 = ((digits/10) + 3) % 10;
num4 = ((digits/1) + 3) % 10;
编辑 2:
如果您直接从编码数字翻译解码数字而不先将值移回 digits
,请执行以下操作:
dNum1 = (num1 + 3) % 10;
dNum2 = (num2 + 3) % 10;
dNum3 = (num3 + 3) % 10;
dNum4 = (num4 + 3) % 10;
这是一个有趣的问题@stack。我看到的一件事是您正在使用单独的语句为 num1
、num2
、num3
、num4
but every encryption follows a defined pattern and implicit is that every decryption does
如果你成功找到这样的模式(我更喜欢说神秘!),那么这种加密就接近解决了!
所以我决定找到这个模式,我成功地找到了它用于你的加密。那些你找到的模式,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;
}