解密 - 分割C编程后取回数字

时间:2015-12-03 14:24:26

标签: c encoding decoding

我刚刚使用简单的C代码进行了加密。加密工作原理如下:“您的应用程序应该读取用户输入的4位整数,并将每个数字替换为向数字添加7的结果,并在将新值跳过10后得到余数: 假设我已输入8,9,0,1,加密后的值将为num1 = ((digits/1000) + 7) % 10; num2 = ((digits/100) + 7) % 10; num3 = ((digits/10) + 7) % 10; num4 = ((digits/1) + 7) % 10;

我正在使用以下代码进行加密:

%

现在我想做一个解密,取回我输入的值。我想知道我是否能够做反向模数? dNum1= (digits/1000) % 10; dNum2= (digits/100) %10; dNum3= (digits/10) %10; dNum4= (digits % 10) ; 的向后计算? 意思是如果a = 3 + 4,a = 7 ..那么什么是7 = b + 4,即b = 7-4。我是

到目前为止我的尝试是:

8,9,0,1

现在的问题是:如何从解密值(1234)中检索原始值? (原始值:$("body").animate({scrollTop:$(“##QuestionScroller”).offset().top},2500)

2 个答案:

答案 0 :(得分:2)

由于您通过添加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;

答案 1 :(得分:1)

这是一个有趣的问题@stack。我看到的一件事是您使用单独的语句将值分配给num1num2num3num4

  

但是每个加密遵循一个定义的模式,而隐含的是   每次解密都

如果你成功找到了这样的模式(我更喜欢说神秘!),那么这种加密就近乎解决了!

所以我决定找到这种模式,并且我成功找到了加密模式。你发现模式,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;
}