码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 《丞相好梦中杀人,我喜梦中听课》(1)密码学入门


    前言

    🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。

    🍁个人主页:红中

    🫒每日emo:等我把脸皮磨厚

    🍂专栏地址:网安专栏

     今天周日,本来想睡个好觉,突然想起系主任临时加了节早八。

    让我死吧。。。

    设个闹钟,早上把会议挂上,签个到,直接睡大觉。

    十点多醒了,发现讲的凯撒密码和维吉尼亚密码

     作为一个前几天刚学完des加密的人,这俩怎么能难住我,现挂直接出文章

     凯撒密码

    看了眼,发现这个凯撒密码挺简单的

     在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。当年恺撒曾用此方法与其将军们进行联系。---------------------------------------引自百度百科

    要是我在那个年代出生,凯撒密码?给你打穿

    还是老三样

    • data:加密/解密的数据
    • key:凯撒密码没密钥
    • mode:加密/解密

     

    凯撒密码需要两个东西

    1. 加密的明文
    2. 后移的位数

    简单来说就是根据ASCII表推位数

    好比对A进行加密,后移位数是7

    加密后就得到H

    没了,就这么简单

    那我就简单叭叭两句,凯撒密码只对字母有效,并且区分大小写。

    代码实现

    1. #include
    2. int main(){
    3. char plaintext[100],ciphertext[100];
    4. char m;
    5. int i,j=0;
    6. printf("请输入明文:\n");
    7. gets(plaintext);
    8. printf("请输入加密位数:\n");
    9. scanf("%d", &i);
    10. for(j = 0; plaintext[j] != '\0'; j++)
    11. {
    12. m = plaintext[j];
    13. if(m <= 'Z' && m >='A')//往后移
    14. ciphertext[j] = (m - 'A' + i) % 26 + 'A';
    15. else if(m <= 'z' && m >='a')
    16. ciphertext[j] = (m - 'a' + i) % 26 + 'a';
    17. else ciphertext[j] = m;
    18. }
    19. ciphertext[j] = '\0';//添加结束符
    20. printf("加密后的密文如下:\n");
    21. for(j = 0; ciphertext[j] != '\0'; j++)
    22. printf("%c", ciphertext[j]);
    23. printf("\n");
    24. }

     

     

    维吉尼亚密码

    这个密码呢,其实也挺简单的,就是在凯撒密码的基础上加了个密钥

    密码表

     第一行就是密钥

    第一列是明文

    好比对m进行加密,密钥是z,

     密文为L

    所以这玩意和凯撒有啥关系。。

    想不明白

    代码实现

    1. #include
    2. #include
    3. void encrypt(char *text, char *result, char *k)
    4. {
    5. int i,j=0,z=0;
    6. for(i=0;i//在明文长度内循环
    7. {
    8. if(text[i]>='a' && text[i] <= 'z') //小写字母
    9. result[z]=(text[i]-'a'+k[j]-'a')%26 +'A';
    10. else //大写字母
    11. result[z]=(text[i]-'A'+k[j]-'a')%26 +'A';
    12. j++;
    13. if(j>=strlen(k)) j=0;//以密钥长度为一个周期循环
    14. z++;
    15. }
    16. }
    17. int main()
    18. {
    19. char text[99]="";
    20. char result[99]="";
    21. char k[99]="";
    22. printf("请输入一段小写英文字母:");//默认输入为一段连续英文字母串
    23. scanf("%s",text);
    24. printf("请输入密钥:");//密钥默认小写
    25. scanf("%s",k);
    26. encrypt(text,result,k);
    27. printf("密文为:%s\n",result);
    28. }

    我得做核酸去了,溜了溜了

  • 相关阅读:
    多视图几何(运动恢复结构sfm)---欧式结构只能获取和世界等比例的点云,这个地方可以解决项目之中的斜率问题,但是不能够解决实际高度的问题。
    全国双非院校考研信息汇总整理 Part.1
    “CarrotFindBadmintonStores“ app Tech Support(URL)
    CDN的基本概念
    BetterJoy蓝牙将switch转化为xbox玩游戏,例子:双人成行(俄区版)
    改进YOLOv5系列:首发结合 RepLKNet 构建 最新 RepLKDeXt 结构|CVPR2022 超大卷积核, 越大越暴力,大到31x31, 涨点高效
    【智能优化算法】基于改进生物地理学优化算法求解单目标优化问题附matlab代码
    U盘坏了数据可以恢复吗?超详细的U盘数据恢复图文教程!
    C++语言程序设计课程设计任务书
    挖矿病毒分析(centos7)
  • 原文地址:https://blog.csdn.net/m0_55400802/article/details/128062913
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号