首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解密-分裂C程序后得到数字

解密-分裂C程序后得到数字
EN

Stack Overflow用户
提问于 2015-12-03 14:24:26
回答 2查看 542关注 0票数 2

我刚刚用一个简单的C代码进行了加密。加密的工作方式如下:“您的应用程序应该读取用户输入的4位整数,并将每个数字替换为将7加到该数字,并在新值下降10之后得到剩余的数字:假设我输入了1234,加密后的值将是8,9,0,1

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

代码语言:javascript
运行
复制
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。我

到目前为止,我尝试的是:

代码语言:javascript
运行
复制
dNum1= (digits/1000) % 10;
dNum2= (digits/100) %10;
dNum3= (digits/10) %10;
dNum4= (digits % 10)  ;

现在的问题是:如何从解密值(8,9,0,1)中检索原始值?(原值:1234)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-03 14:28:55

因为你通过加7来编码每一个数字,所以你需要通过减去7来解码。如果值是负值,那么添加10就可以得到预期的值。

代码语言:javascript
运行
复制
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提出这个建议。

代码语言:javascript
运行
复制
num1 = ((digits/1000) + 3) % 10;
num2 = ((digits/100) + 3) % 10;
num3 = ((digits/10) + 3) % 10;
num4 = ((digits/1) + 3) % 10;

EDIT2:

如果要直接从编码数字转换解码数字,而不首先将值移回digits,请执行以下操作:

代码语言:javascript
运行
复制
dNum1 = (num1 + 3) % 10;
dNum2 = (num2 + 3) % 10;
dNum3 = (num3 + 3) % 10;
dNum4 = (num4 + 3) % 10;
票数 2
EN

Stack Overflow用户

发布于 2015-12-03 15:04:33

这是一个有趣的问题@堆栈。我看到的一件事是,您正在使用单个语句将值赋值给num1num2num3num4

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

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

因此,我决定找到模式,我成功地找到了它的加密。如果您找到模式,for loop非常有用,可以重复这个过程,从而对给定的编号进行编码。(解码也一样)

备注:我不知道您是否需要这样的解决方案,但是这更有用,因为变量的数量较少,这是任何好程序的一个特点。这个代码只适用于4位数字..。如果你想把它扩展到n个数字,请随便问我:)

所以!这是我的代码:

代码语言:javascript
运行
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34068488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档