Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >加密过程工作半个

加密过程工作半个
EN

Stack Overflow用户
提问于 2018-01-25 00:53:32
回答 3查看 86关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <string.h>
int main()
{
char inpusr[100];
int i, length,key;
length=100;
scanf("%[^\n]s",inpusr);
scanf("%d",&key);
printf("%s\n", inpusr);
    for(i = 0; i <=length; i++) {
        if(inpusr[i] >= 97 && inpusr[i] <=122) {
            inpusr[i] = inpusr[i] + key;
            if (inpusr[i]>122){
             inpusr[i] = (inpusr[i] - 122)+96;

            }
        }

    }
printf("%s\n", inpusr);
return 0;
}

我用C语言编写了一个程序来加密凯撒密码方法中的字符串,但是为什么当输入为'z‘并且键在6以上时,我的代码不能显示移位的字母表。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-25 01:31:41

首先,遵循一些关于如何操作char数组的指南。Char数组不是String。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char inpusr[100];
scanf("%[^\n]s",inpusr);

如果你在这里输入"Hello“,你知道你在数组中得到了什么吗?.=‘3’>.下一次你可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <string.h>
memset( inpusr , 0 , sizeof(inpusr));

现在关于你的代码你说

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(a>10 && a<100)
{
    if (a<5) // This is a logic error.If a<10 you don't get in to block.
    {
    }
}

出于兴趣凯撒密码方法,是A=(x+n)模26。

这是一个工作代码:

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

int main()
{
char inpusr[100];
int i, length,key;
length=100;
memset( inpusr , 0 , sizeof(inpusr));
scanf("%[^\n]s",inpusr);
scanf("%d",&key);
printf("%s\n", inpusr);
for(i = 0; i <=length; i++)
{
    if(inpusr[i] >= 97 && inpusr[i] <=122)
    {
        inpusr[i] = (((inpusr[i] - 97 + key) % 26) + 97);
    }
    else if ((inpusr[i] >= 65 && inpusr[i] <=90))
    {
        inpusr[i] = (((inpusr[i] - 65 + key) % 26) + 65);
    }

}
printf("%s\n", inpusr);
return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-25 01:43:40

基本问题是,当计算每个字符的加密值时,可能会遇到大于127的值,这将导致计算中的溢出,并导致inpuser[i]的负值。

例如,如果inpusr[i]是122 ('z'),键是6,那么inpuser[i]的新值将是-128,而不是128 (这是计算正确的必要条件)。

解决这一问题的一种方法是使用临时int变量重新实现编码字符的计算,这将消除溢出条件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
char inpusr[100];
int i, length,key;
length=100;
scanf("%[^\n]s",inpusr);
scanf("%d",&key);
printf("%s\n", inpusr);
    for(i = 0; i <=length; i++) {
        if(inpusr[i] >= 97 && inpusr[i] <=122) {
            int encoded_char;
            encoded_char = inpusr[i] + key;
            if (encoded_char>122){
             encoded_char = (encoded_char - 122)+96;

        }
        inpusr[i] = encoded_char;
    }

}
printf("%s\n", inpusr);
return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-25 03:49:19

凯撒密码

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

int main()
{
    char inpusr[100];
    char key_input[3];
    int key = 0;
    int len = 100;

    fgets(inpusr, len, stdin);
    printf("%s\n", inpusr);
    fgets(key_input, 3, stdin); // to allow -25
    key = atoi(key_input);
    printf("%d\n", key);
    while (len--)
    {
        if (inpusr[len] >= 97 && inpusr[len] <=122)
            inpusr[len] = (inpusr[len] - 97 + (key % 26) + 26) % 26 + 97; // '+ 26' is added in case of negative key
    }
    printf("%s\n", inpusr);
    return 0;
}

避免扫描,因为它是不安全的(您可以利用缓冲区溢出)。

此外,你也不考虑大写字母。

对不起,如果我忘了什么。

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

https://stackoverflow.com/questions/48438949

复制
相关文章
什么是uid?什么是Auth?什么是验证器?
什么是uid? UID,用户身份证明(User Identification)的缩写,网络平台注册时系统自动生成的数值。 什么是Auth? 它的身份,比较老板 员工 经理。。。。。 作用用于区
贵哥的编程之路
2022/07/04
3.5K0
eclipse安装gwt插件,浏览器安装gwt插件,eclipse启动gwt自带的工程,并在浏览器上访问,eclipse导入gwt工程「建议收藏」
首先gwt插件,小编这里上传了eclipse和浏览器上的gwt插件:http://download.csdn.net/download/csdnliuxin123524/10255451
全栈程序员站长
2022/08/05
1.2K0
eclipse安装gwt插件,浏览器安装gwt插件,eclipse启动gwt自带的工程,并在浏览器上访问,eclipse导入gwt工程「建议收藏」
身份验证器是如何验证我们的身份?
​ 我以为我最初遇见他是在宝塔面板上,因为他可以方便的帮助我们进行身份验证。其实我们早就相遇在QQ安全中心手机版的口令里面(此处不确定是否是使用同一种算法,不过原理类似)。当初遇见他,我并不知道他是离线的。我以为谷歌身份验证器肯定是绑定谷歌账号的。后来找了半天,原来他只是个离线的软件。相信有很多同学和我一样的想法:离线身份验证器如何能使我们登录在线的场景?
yumusb
2020/08/28
4.2K0
常见服务器对jdk版本的支持
WebSphere5.1:JDK1.4,Servelet2.3、JSP1.2 WebSphere6.0:JDK1.4,Servelet2.4、JSP2.0 WebSphere6.1:JDK5.0,Servelet2.4、JSP2.0 Tomcat4.1:JDK1.4,Servelet2.3、JSP1.2 Tomcat5.5:JDK5.0,Servelet2.4、JSP2.0 Tomcat5.5:JDK5.0,Servelet2.4、JSP2.0 Tomcat6.0:JDK5.0,Servele
西门呀在吹雪
2020/11/09
2K0
hibernate-笔记
什么是 hibernate 框架     1.hibernate 框架应用在 javaee 三次结构中 dao 层框架     2.在dao 层里面对数据库做curd 操作, 使用hibernate       做crud 操作, hibernate 底层代码就是jdbc, hibernate       对 jdbc 进行封装,使用hidernate 好处,不需要写复杂的jdbc 代码了,不需要写sql 语句实现。 什么是orm 思想     1.hidernate 使用orm 思想对数据库进行cru
用户1197315
2018/01/22
8960
hibernate-笔记
GWT 初体验
最近体验了一下 GWT(Google Web Toolkit),其实这个技术老早就有了,写 Java 代码,代码很像 AWT 或者 Swing,但是最后编译成一个 war 包,也就是说,没有啰嗦的 JavaScript、HTML 和模板语言,Java 从前到后通吃,常用的模块都被封装成组件了。虽说写起来代码还挺啰嗦的(写法上面居然不支持链式调用,这确实让我看不懂),而且也没有传统 Web 开发方式来得直观,但也算一种很有意思的开发方式,值得体验一下。网上有足够多的教程,要系统地学习,官方文档是最好的材料,非常详尽。而我的方式,则更具个人风格一点,比较+吐槽,这可不是教程。
四火
2022/07/18
1.1K0
GWT 初体验
什么是Soc验证,一个简单的uart验证实例
哈喽,我是不二鱼,感谢您的阅读。在上一篇文章中,我大概讲了什么是Soc,没看的朋友可以点开链接阅读一下。
用户10108023
2022/10/28
1.1K0
swift-annotations:java编译时警告主版本 52 比 51 新, 此编译器支持最新的主 版本。
本文介绍了在Java Bean代码中加入Swift注释时出现的警告问题,该问题会导致编译器版本比当前编译器版本高。在文章中提出两种解决方法:1.升级Java编译器到1.8;2.使用Swift-annotations 0.14.x版本。
10km
2018/01/03
3.4K0
kubernetes各个版本支持时间是多长?
Kubernetes发行版通常支持9个月,在此期间,如果发现严重的bug或安全问题,会在对应的分支发布补丁版本。 比如,当前版本为v1.10.1,当社区修复一些bug后,就会发布v1.10.2版本。
党志强
2020/02/11
8080
【GIT版本控制】--什么是版本控制
版本控制是在软件开发和许多其他领域中非常重要的工具,因为它解决了许多与协作、追踪更改和管理项目相关的问题。以下是一些主要原因,解释了为什么需要版本控制:
喵叔
2023/10/06
3140
Java中的 Switch 是如何支持 String 的?为什么不支持 long?
我们知道 Java Switch 支持byte、short、int 类型,在 JDK 1.5 时,支持了枚举类型,在 JDK 1.7 时,又支持了 String类型。那么它为什么就不能支持 long 类型呢,明明它跟 byte、short、int 一样都是数值型,它又是咋支持 String 类型的呢?
好好学java
2021/04/30
7390
Java中的 Switch 是如何支持 String 的?为什么不支持 long?
TestDriven.NET (2.7 Beta) 支持Silverlight/CoreCLR
Silverlight 1.1,在这个微软已经提供下载alpha版本中,包含了一个缩减版的CLR,还有最新发布的Dynamic Language Runtime (DLR)。Silverlight将被插入Internet Explorer、Mozilla和Safari浏览器中,这意味着缩减版的CLR也能够运行在这些平台上。 微软将这个缩减的CLR称为“Core CLR”(核心CLR)(这个核心CLR的代码代号是Tolesto,微软表示这恰巧是一个环绕土星的卫星的名字。)Core CLR将包含garbage
张善友
2018/01/30
5120
Selenium最新版本不再支持PhantomJS
今天想对《自动读取单位某系统数据》一文中的项目做些优化,将Selenium+firefox改为无界面的PhantomJS,出现如下错误:
拓荒者
2019/03/15
1.9K0
Insider 版本中的 SMB 身份验证速率限制器
嘿伙计们, 内德 又来了。我有一个新的 SMB 预览功能要分享:SMB 身份验证速率限制器。它在Windows Server Insider build 25075中可用。 几周后,它还将出现在 Windows Server Azure Edition Insider 和 Windows 11 Insider Dev Channel 版本中。你不需要做任何事情——它就在那里并且开箱即用——但我希望你想知道更多。
Khan安全团队
2022/03/17
7360
聊聊如何验证线上的版本是符合预期的版本
当我们想知道部署项目的哪个版本有问题?当我们想知道线上运行的版本是否是我们预期的版本?当我们想把部署的版本与代码进行关联?如果是你用git来做版本管理,那就可以使用git-commit-id-maven-plugin插件来实现上述功能。
lyb-geek
2022/05/03
5670
LiteAVSDK 迎来最新的 6.8 版本
该功能通过调用 ITXLiteAVNetworkProxy.h 中的 setSocks5Proxy 接口进行设置,可以参考 Socks5 代理服务器的的搭建方案:
腾讯云音视频
2019/11/22
2.8K0
LiteAVSDK 迎来最新的 6.8 版本
【Android APT】注解处理器 ( 配置注解依赖、支持的注解类型、Java 版本支持 )
Android APT 学习进阶路径 : 推荐按照顺序阅读 , 从零基础到开发简易 ButterKnife 注解框架的学习路径 ;
韩曙亮
2023/03/29
3600
真香!IDEA 最新版本,支持免打扰模式!
IntelliJ IDEA 2020.1 的第二个早期访问版本已发布,新的 EAP 构建对调试器和事件探查器(Profiler)进行了改进,并引入了新的提交工具窗口(Commit toolwindow)以及禅模式(Zen Mode)。
芋道源码
2020/02/19
2.4K0
真香!IDEA 最新版本,支持免打扰模式!
点击加载更多

相似问题

使用散列和范围主键的性能: Dynamodb

20

通过散列和范围键查询DynamoDB表

10

NoSQL的用例

544

DynamoDB:搜索散列键或范围键

20

NoSQL技术、用例、优点和弱点

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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