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

解密一个4位数字
EN

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
#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-15 17: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

复制
相关文章
为什么我写不出面向对象的代码
举个栗子,比如之前项目组做的付款业务,这里面包含了A付款,B付款,C付款,D付款等模块。
Lvshen
2022/12/05
1.2K0
为什么我写不出面向对象的代码
为什么我用了Redis之后,系统的性能却没有提升
很多时候,我们在面对一些热点数据的时候,通常会选择将热点数据放到redis中,以减少数据库的查询,减轻数据库的压力。但是如果我们使用redis的方式不对,那么可能导致系统的性能不升反降。
Java进阶之路
2022/08/03
1.9K0
为什么我用了Redis之后,系统的性能却没有提升
使用两年之后,我为什么卸载了Istio?
作者 | Eric Fossas 译者 | 刘雅梦 策划 | Tina 在生产中使用了 Istio 近两年之后,我们要和它说再见了。 服务网络大战正在肆虐。现在我把票投给了 Linkerd。 服务网格提供了微服务之间的流量监控,包括服务通信的映射和在它们之间生成的 HTTP 状态码。通过添加服务网格,你可以在服务间添加 mTLS,或者换句话说,可以在服务间添加加密的 HTTP 通信。 在我看来,这两个工具几乎对所有人都很有用。许多服务网格都提供了诸如流量分割、重试、超时等高级功能。我很少相信这些功能是有用的
深度学习与Python
2023/04/01
7470
使用两年之后,我为什么卸载了Istio?
【Verilog我思我用】-向量部分选择
在《AXI_lite代码简解-AXI-Lite 源码分析》 中,查看AXI_lite的源代码之后有一个比较陌生的“面庞”,如下:
碎碎思
2021/02/01
6980
【Verilog我思我用】-向量部分选择
在设计了100个弹框之后,这些是我的心得
什么是弹框? 弹框是一种交互方式,用作提醒,做决定或者解决某个任务。弹框一般包含一个蒙版,一个主体及一个关闭入口,常见于网页及移动端。其好处是让用户更聚焦,且不用离开当前页面,更快更容易完成任务。由于
用户1667431
2018/04/18
1.6K0
在设计了100个弹框之后,这些是我的心得
为什么我的BERT不行?
这节只列举问题,思路放下一章。这里是给大家去定位问题的思路,通过这些渠道能发现一些问题,而不是对问题束手无策了。
lyhue1991
2023/02/23
1.2K0
为什么我的BERT不行?
为什么我在公司里访问不了家里的电脑?
上篇文章「为什么我们家里的IP都是192.168开头的?」提到,因为IPv4地址有限,最大42亿个。为了更好的利用这有限的IP数量,网络分为局域网和广域网,将IP分为了私有IP和公网IP,一个局域网里的N多台机器都可以共用一个公网IP,从而大大增加了"可用IP数量"。
小白debug
2023/02/17
2.1K0
为什么我在公司里访问不了家里的电脑?
【ML】支持向量机是什么?我为什么要使用它?
支持向量机是一种有监督的机器学习算法,可以用于分类或回归问题。它使用一种称为核技巧的技术来转换数据,然后根据这些转换在可能的输出之间找到一个最佳边界。简单地说,它做一些非常复杂的数据转换,然后根据定义的标签或输出来划分数据。
陆勤_数据人网
2018/12/27
2K0
【ML】支持向量机是什么?我为什么要使用它?
[插件化开发] Poc之后,我选择放弃OSGI
我选择放弃该方案,使用Servlet 3.0提供的热插拔来实现插件模式,只是需要重新加载应用上下文,因此,建议各位部署多实例节点,在升级服务时,采用灰度发布来降低影响。
Isaac Zhang
2019/10/24
1.3K0
为什么我应该使用指针而不是对象本身
对于现代 C++ (尤其是 C++ 11 之后),大量使用 new 动态分配是不明智的选择。
ClearSeve
2022/02/10
1.4K0
一切皆对象,那是我的对象
刚才那些就是函数的基本知识了。我们来让你的知识更进一步。在 Python 中我们可以在一个函数中定义另一个函数:
Python知识大全
2020/02/21
5220
我为什么读博,以及我为什么不读博?
研究生三年后,毕业生都做出了自己的选择,一部分人就业,一部分人选择继续深造,不同的路径,同样的都是在探索自己的生涯之路。很多人都会比较一下毕业后直接工作和读博这三年内到底有何不同?下面就彻底晒晒。
用户3578099
2020/11/30
1.1K0
我为什么读博,以及我为什么不读博?
为什么我要写自己的框架?
其实说白了框架就是使用别人造好的轮子。在软件开发里面就是command+C/command+V。
哲洛不闹
2018/09/18
1.3K0
为什么我要写自己的框架?
为什么我的Redis这么“慢”?
Redis 作为内存数据库,拥有非常高的性能,单个实例的 QPS 能够达到 10W 左右。
架构师修行之路
2020/08/20
3.7K0
我的KT库之—–对象池
http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html
全栈程序员站长
2022/07/05
3360
我的KT库之—–对象池
我在 MySQL 的那些年
作者:赖铮(Allen Lai),前 MySQL 官方团队成员,专注数据库内核开发近二十年,先后就职于达梦,Teradata,北大方正以及 MySQL InnoDB 存储引擎团队,是达梦数据库内核,方正 XML 数据库,以及 MySQL InnoDB 的 GIS 支持,透明加密功能的主要开发者。现任腾讯 TEG 云架构平台部数据库团队专家工程师,负责腾讯云 CDB 数据库内核的研发。 面试 2012 年的春天,阳光明媚,鸟语花香,我正在张江的一栋橙黄色的大楼里跟我的小伙伴们一起奋力
腾讯技术工程官方号
2020/11/05
6930
第九期|不是吧,我在社交媒体的照片也会被网络爬虫?
顶象防御云业务安全情报中心监测到,某社交媒体平台遭遇持续性的恶意爬虫盗取。被批量盗取用户信息和原创内容,经分类梳理和初步加工后,被黑灰产转售给竞争对手或直接用于恶意营销。由此不仅给社交媒体平台的数字资产带来直接损失,影响用户对社交媒体平台的信任,更破坏了内容产业的健康发展。
顶象技术
2022/11/09
7930
第九期|不是吧,我在社交媒体的照片也会被网络爬虫?
我在微软的面试经历
大约2-3个月前,我在Linkedin上看到微软员工的一系列消息,是与微软为SDE暑期实习生招聘预赛有关。我对此非常兴奋,不想错过这次机会。
ACM算法日常
2020/11/11
1K0
我在微软的面试经历
我说我为什么抽不到SSR,原来是这段代码在作祟...
元素被选中的机会并不相等,而是由相对“权重”(或概率)被选中的,是偏心的,这就是加权随机。
机智的程序员小熊
2023/03/02
1.3K0
我说我为什么抽不到SSR,原来是这段代码在作祟...
见证——写在我的台式机光荣退役之后
2009年8月1日我到厦门大正电脑城入手小黑本本,然后回家里将我那台伴随我4年半的台式机硬盘里的数据传到我的本本之后,宣告了我的台式机从此退役,由小黑接任它的历史使命,继续见证我今后生活的点点滴滴…
SAP梦心
2022/05/10
7060

相似问题

为什么我的对象会被分离?

24

为什么我的函数会被调用两次?

41

为什么我的onResume会被调用两次?

199

为什么我的函数会被调用两次?

30

为什么我的函数会被两次调用?

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文