首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >解密一个4位数字

解密一个4位数字
EN

Stack Overflow用户
提问于 2020-03-15 18:24:33
回答 1查看 2.1K关注 0票数 1

我刚刚用C语言编写了一个简单的程序,它接受一个4位数字的代码,并使用这个简单的算法加密每个数字(以前分解的,从0到9):

代码语言:javascript
代码运行次数:0
运行
复制
new_num1 = (old_num1 + 7) % 10;
new_num2 = (old_num2 + 7) % 10;
new_num3 = (old_num3 + 7) % 10;
new_num4 = (old_num4 + 7) % 10;

现在我想做一个解密.c程序来解密先前加密的4码数字.

我可以用哪种方式恢复号码?

这是我为crypter.c编写的代码(在本例中,我还用第三位和第二位与第四位进行还原)

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>

int main()
{
    int codice;
    int num1, num2, num3, num4, temp1, temp2, new_num1_temp, new_num2_temp;

    printf("\n(LOLCrytter v0.1)\n\nInsert 4-digit code to crypt: -1 to exit ");
    scanf("%d", &codice);    

    if(codice == -1)
        return 0;

    while(codice < 1000 || codice > 9999) {
        printf("\nInsert NUMERIC (!) 4-digit code bru..: ");
        scanf("%d", &codice); 
    }

    // Get every digit by logic math and not by strings functions      
    temp1 = codice;
    num1 = temp1 / 1000;
    temp2 = temp1 % 1000;
    num2 = temp2 / 100;
    temp1 = temp2 % 100;
    num3 = temp1 / 10;
    num4 = temp1 % 10;

    // Crypting...    
    num1 = (num1 + 7) % 10;
    num2 = (num2 + 7) % 10;
    num3 = (num3 + 7) % 10;
    num4 = (num4 + 7) % 10;

    // Crypting...    
    new_num1_temp = num3;
    num3 = num1;
    num1 = new_num1_temp;   
    new_num2_temp = num4;
    num4 = num2;
    num2 = new_num2_temp;

    printf("\nNew code: %d%d%d%d\n\n", num1, num2, num3, num4);

    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-16 01:40:45

如果输入仅限于0.9,那么它将起作用:加密8是(8 + 7) % 10 = 5。解密是10 +5-7=8。您的自定义算法一般是:x的加密是(x + 7) %m == r;解密是:m+r-7 == x。

但是有问题的作者想要“解密一个4位数的数字”,如果作者考虑更改代码,我会发出警告: Mod操作不是双射,它是不可逆的:(0 + 7) % 10 = 7;(10 + 7) % 10 = 7。

如果算法的输入范围仅为0.9,则例如: 10 %7= 3;7*1 +3= 10。即7* (10 / 7) +3= 10。每一个数字a可表示为a =m* (a/m) + r;其中m为模,r -余数。"/“整体判断。

形式(k + n) mod m的函数适用于杂凑函数,用于随机数的生成。如果你想用简单的加密来学习,你可以用最少的努力获得更好的结果--使用XOR。生成键并使用纯文本进行异或。使用相同密钥解密XOR加密文本。阅读一次pad 一次性垫 -非常简单的实现加密技术,但这是无法破解的。

更新的:作为密码专家,我建议您(如果您对密码学的基础知识感兴趣)开始学习和实现经典的简单密码算法,如:凯撒密码、简单替换、Vigener密码系统(它们可以在维基百科上找到)。

您的密码函数(t + 7) % 10与凯撒教育密码非常相似,但有一些变化:加密可以使用模块化算法表示,首先将字母转换为数字,根据该方案,A→0,B→1,…,Z→25。用移位n对字母x进行加密,可以用数学方法描述为,

解密也是类似的,

祝你好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60696215

复制
相关文章

相似问题

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