升級版凱撒密碼加密解密器

目錄

  • 開頭
  • 程序
  • 程序的流程圖
  • 程序加密與解密的效果
    • 例1
      • 加密的過程
      • 加密之后的文本
    • 例2
      • 解密之后的文本
      • 解密之后的文本
    • 例3
      • 加密之后的文本
      • 加密之后的文本
  • 結尾

開頭

大家好,我叫這是我58。今天,我們來看一下我用C語言編譯的升級版凱撒密碼加密解密器和與之相關的一些東西。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
void caeser(char* str, int ik) {int im = 0;int ima = 0;int i = 0;printf("偏移量為多少?(整數) -> ");scanf("%d", &im);im %= 95, ik && (im = -im), ima = im;for (; i < strlen(str); i++) {for (ima = im; ima;) {ima > 0 && str[i]++, ima > 0 || str[i]--;127 == str[i] && (str[i] = ' '), 31 == str[i] && (str[i] = '~');ima > 0 && ima--, ima < 0 && ima++;}}
}
int main() {int ik = 0;char str[99999] = "";while (1) {char ck[] = "加";printf("你要加密還是解密?(0加密,非0解密) -> ");scanf("%d", &ik);if (ik) {strcpy(ck, "解");}printf("請輸入你要凱撒密碼%s密的文本(不能有不可以顯示的字符) -> ", ck);char* pc = str;do {scanf("%s", str);pc = str;for (; *pc > 31 && *pc < 127; pc++) {;}if ('\0' != *pc) {printf("輸入錯誤,請重新輸入 -> ");}} while ('\0' != *pc);caeser(str, ik);printf("%s密之后的文本 -> %s\n------------------------------------------------\n", ck, str);}return 0;
}

程序的流程圖

開始
把宏_CRT_SECURE_NO_WARNINGS定義為1
導入stdio.h
導入string.h
定義caeser(凱撒)函數
定義整型ik為0
把義有99999個字符的字符串str初始化為空字符串
1?(永為真)
定義字符串ck為“加”
輸出“你要加密還是解密?(0加密,非解密) -> ”
把ik設為你輸入的數
ik?
把“解”復制并粘貼到字符串ck里面去
輸出“請輸入你要凱撒密碼%s密的文本(不能有不可以顯示的字符) -> ”(“%s”代字符串ck)
定義一個字符型指針pc為str字符串的首元素的地址
把字符串str設為你輸入的字符串
把字符型指針pc設為str字符串的首元素的地址
*pc > 31 && *pc < 127?
pc自增1
'\0' != *pc?
輸出“輸入錯誤,請重新輸入 -> ”
'\0' != *pc?
執行caeser函數,參數有str和ik
輸出“%s密之后的文本 -> %s\n------------------------------------------------\n”(第一個“%s”代ck,第二個“%s”代str)
caeser函數
結束
開始
定義整型im為0
定義整型ima為0
定義整型i為0
輸出“偏移量為多少?(整數) -> ”
把im設為你輸入的數
im模等95
ik?
把im設為im的相反數
把ima設為im
i < strlen(str)?
把ima設為im
ima?
ima > 0?
字符串str的第i項自增1
ima > 0?
127 == str[i]?
把字符串str的第i項設為空格
31 == str[i]?
把字符串str的第i項設為“~”
ima > 0?
ima自減1
ima < 0?
ima自增1
i自增1
字符串str的第i項自減1

程序加密與解密的效果

例1

加密的過程

你要加密還是解密?(0加密,非0解密) -> 0
請輸入你要凱撒密碼加密的文本(不能有不可以顯示的字符) -> 114514
偏移量為多少?(整數) -> 1919180

加密之后的文本

加密之后的文本 -> ‘’*+'*

例2

解密之后的文本

你要加密還是解密?(0加密,非0解密) -> 1
請輸入你要凱撒密碼解密的文本(不能有不可以顯示的字符) -> ‘’*+'*
偏移量為多少?(整數) -> 1919180

解密之后的文本

解密之后的文本 -> 114514

例3

加密之后的文本

你要加密還是解密?(0加密,非0解密) -> 0
請輸入你要凱撒密碼加密的文本(不能有不可以顯示的字符) -> Hello,world!
偏移量為多少?(整數) -> -6

加密之后的文本

加密之后的文本 -> B_ffi&qilf^z

結尾

這就是我的用C語言編譯的升級版凱撒密碼加密解密器,有95種偏移量可供你選擇,不過,凱撒密碼其實既不能獲得更大的安全性,而且也是非常能夠容易破解出來的1,具體如下。

即使使用唯密文攻擊,愷撒密碼也是一種非常容易破解的加密方式。可能有兩種情況需要考慮:
1.攻擊者知道(或者猜測)密碼中使用了某個簡單的替換加密方式,但是不確定是愷撒密碼;
2.攻擊者知道(或者猜測)使用了愷撒密碼,但是不知道其偏移量。
對于第一種情況,攻擊者可以通過使用諸如頻率分析或者樣式單詞分析的方法, [3]馬上就能從分析結果中看出規律,得出加密者使用的是愷撒密碼。
對于第二種情況,解決方法更加簡單。由于使用愷撒密碼進行加密的語言一般都是字母文字系統,因此密碼中可能是使用的偏移量也是有限的,例如使用26個字母的英語,它的偏移量最多就是25(偏移量26等同于偏移量0,即明文;偏移量超過26,等同于偏移量1-25)。因此可以通過窮舉法,很輕易地進行破解。其中一種方法是在表格中寫下密文中的某個小片段使用所有可能的偏移量解密后的內容——稱為候選明文,然后分析表格中的候選明文是否具有實際含義,得出正確的偏移量,解密整個密文。例如,被選擇出的密文片段是"EXXEGOEXSRGI",從右表中的候選明文,可以很快看出其正確的偏移量是4。也可以通過在每一個密文單詞的每一個字母下面,縱向寫下整個字母表其他字母,然后可以通過分析,得出其中的某一行便是明文。
另外一種攻擊方法是通過頻率分析。當密文長度足夠大的情況下,可以先分析密文中每個字母出現的頻率,然后將這一頻率與正常情況下的該語言字母表中所有字母的出現頻率做比較。例如在英語中,正常明文中字母E和T出現的頻率特別高,而字母Q和Z出現的頻率特別低,而在法語中出現頻率最高的字母是E,最低的是K和W。可以通過這一特點,分析密文字母出現的頻率,可以估計出正確的偏移量。此外,有時還可以將頻率分析從字母推廣到單詞,例如英語中,出現頻率最高的單詞是:the, of, and, a, to, in…。可以通過將最常見的單詞的所有可能的25組密文,編組成字典,進行分析。比如QEB可能是the,MPQY可能是單詞know(當然也可能是aden)。但是頻率分析也有其局限性,它對于較短或故意省略元音字母或者其他縮寫方式寫成的明文加密出來的密文進行解密并不適用。
另外,通過多次使用愷撒密碼來加密并不能獲得更大的安全性,因為使用偏移量A加密得到的結果再用偏移量B加密,等同于使用A+B的偏移量進行加密的結果。1


  1. 選自百度百科里的愷撒(凱撒)密碼 ?? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45659.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小程序 - - - - - 實現漸隱漸顯(監聽滾動距離版)

代碼如下&#xff1a; <!-- fixed-left --> <view class"fixed-box" animation"{{animationData}}">這里是漸隱漸顯的標簽 </view>.fixed-box {position: fixed;left: 0;top: 0;z-index: 999;background-color: #ccc;/* background-colo…

如何設計統計量及相關假設檢驗

一、如何設置H0和H1假設 誰做H0&#xff0c;誰做H1&#xff0c;在統計學的假設檢驗里是有約定俗成的規定的。即&#xff1a;status quo&#xff08;默認/現狀&#xff09;是H0&#xff0c;而新觀點或試圖challenge現狀的是H1。H1也叫research hypothesis&#xff0c;所以我們做…

【多個Python版本存在,使用pip+不同版本安裝庫時,windows彈出打開方式窗口的解決方法】

問題描述 電腦上存在python3.9&#xff0c;3.10&#xff0c;3.11&#xff0c;安裝順序也是先安裝3.9&#xff0c;然后3.10&#xff0c;最后3.11&#xff0c;那么直接使用pip安裝&#xff0c;會裝在3.11的位置&#xff0c;經過搜索可以通過pip版本&#xff0c;比如pip3.9 insta…

1.3- Zygote

第三節 Zygote 在Android系統中&#xff0c;Zygote是一個非常核心的組件&#xff0c;它扮演著孵化新應用程序進程的角色。Zygote是Android啟動過程中創建的第一個Java虛擬機&#xff08;JVM&#xff09;實例&#xff08;在Android中稱為Dalvik或ART虛擬機&#xff0c;取決于An…

如何在勒索軟件攻擊中幸存下來:最佳備份實踐、勒索攔截方案

無論身處什么業務或行業&#xff0c;數據都是您業務的關鍵資產。沒有針對數據進行安全可靠的備份保護&#xff0c;您將會受到許多“可能性”的威脅&#xff0c;無論數據丟失是由于在鍵盤上灑了飲料還是遭受到了勒索軟件的攻擊。 為了確保業務不被中斷&#xff0c;企業數據不會…

Python: 初識Python

文章目錄 1. Python的背景知識1.1 Python是咋來的?1.2 Python的特點1.3 Python能干啥?1.4 Python的缺點 2. 搭建Python環境2.1 安裝Python2.2 安裝PyCharm2.3 用pycharm編寫python程序 1. Python的背景知識 1.1 Python是咋來的? 由Guido van Rossum于1989年圣誕節為打發無…

一個用于管理多個 Node.js 版本的安裝和切換開源工具

大家好&#xff0c;今天給大家分享一個用于管理多個Node.js版本的工具 NVM&#xff08;Node Version Manager&#xff09;&#xff0c;它允許開發者在同一臺機器上安裝和使用不同版本的Node.js&#xff0c;解決了版本兼容性問題&#xff0c;為開發者提供了極大的便利。 在開發環…

路網雙線合并單線——ArcGISpro 解決方法

路網雙線合并成單線是一個在地圖制作、交通規劃以及GIS分析中常見的需求。雙線路網定義&#xff1a;具有不同流向、不同平面結構的道路。此外&#xff0c;車道數較多的道路&#xff08;例如&#xff0c;雙黃實線車道數大于4的道路&#xff09;也可以視為雙線路網&#xff0c;本…

iPhone 如何修改鎖屏密碼?修改密碼的具體步驟總結

修改 iPhone 鎖屏密碼 當你還記得當前設置的鎖屏密碼時&#xff0c;想要修改密碼就非常的簡單了&#xff0c;只需要簡單的點幾下就可以重新設置新密碼&#xff0c;下面是具體的操作步驟&#xff1a; 首先我們進入設置應用程序&#xff0c;然后找到“面容 ID 與密碼”。 然后需…

python3多進程用途和場景

Python3 的多進程模塊 multiprocessing 提供了多種用于并行處理的功能&#xff0c;適用于各種場景。以下是一些常見的用途和場景&#xff1a; 用途 CPU 密集型任務&#xff1a; 多進程適用于需要大量 CPU 計算的任務&#xff0c;例如數值計算、數據處理、圖像處理等。這些任務…

Redis的中BitMap的應用

一、應用場景 通常用于構建布隆過濾器 業務場景需要頻繁的查詢數據庫里的數據&#xff0c;但是這些數據又不一定都存在&#xff0c;一些大量無效的數據庫請求&#xff0c;占用了數據庫的鏈接。 本質上保護數據庫&#xff0c;減少無用的請求。 解決&#xff1a; 1、把查詢的…

(01)Unity使用在線AI大模型(使用百度千帆服務)

目錄 一、概要 二、環境說明 三、申請百度千帆Key 四、使用千帆大模型 四、給大模型套殼 一、概要 在Unity中使用在線大模型分為兩篇發布&#xff0c;此篇文檔為在Python中使用千帆大模型&#xff0c;整體實現邏輯是&#xff1a;在Python中接入大模型—>發布為可傳參的…

護眼臺燈的功能作用有哪些?深挖臺燈護眼是真的嗎

隨著現代生活方式的改變&#xff0c;孩子們面臨著越來越多的視力挑戰。在近視學生中&#xff0c;近10%為高度近視&#xff0c;且占比隨年級升高而增長。幼兒園6歲兒童中有1.5%為高度近視&#xff0c;而高中階段則達到了17.6%。為了守護孩子們的視力健康&#xff0c;在科技飛速發…

關鍵字 internal

在C#中&#xff0c;internal 關鍵字是一個訪問修飾符&#xff0c;它用于限制類型或類型成員的訪問性。當一個類型&#xff08;類、結構體、接口、枚舉等&#xff09;或類型成員&#xff08;字段、屬性、方法、事件等&#xff09;被聲明為 internal 時&#xff0c;它只能在同一程…

無符號數和有符號數的轉換

1、有符號數轉換成無符號數 1.1 例一 首先&#xff0c;我們需要清楚 C語言中負數是以補碼的形式進行存儲的。 示例&#xff1a;負數-1&#xff0c; &#xff08;此處&#xff0c;假設是8位二進制表示&#xff09; 對應正數的原碼&#xff1a;0000 0001&#xff1b;取反&…

通俗易懂多圖透徹講解二叉樹的遍歷--前序, 中序和后序

二叉樹的遍歷是一個數據結構中經常會遇到的知識點, 具體又分為前序, 中序和后序三種. 什么是樹? 先來理解一下什么是樹, 從一個我們相對熟悉的家譜樹(Family Tree)說起吧. 家族的根是爺爺, 然后生了兩個娃, 大伯和你爸爸. 繼續往下, 有堂哥堂姐, 還有你以及你妹, 等等. 一個…

簡化流程,強化協作——揭秘可道云TeamOS文檔審批的實用魅力

在團隊協作的過程中&#xff0c;文檔審批是確保信息安全和流程規范的重要環節。然而&#xff0c;傳統的文檔審批流程往往繁瑣且僵化&#xff0c;難以滿足團隊快速響應和靈活協作的需求。 可道云teamOS的文檔審批功能&#xff0c;以其獨特的靈活性和便捷性&#xff0c;為團隊帶…

吸血鬼之戀

吸血鬼之戀 AI制作&#xff0c;吸血鬼之戀&#xff0c;BGM選自《暮光之城》&#xff0c;希望大家喜歡。 歡迎你分享你的作品到我們的平臺上&#xff1a;http://www.shxcj.com 或者 www.2img.ai 讓更多的人看到你的才華。 創作不易&#xff0c;覺得不錯的話&#xff0c;點個贊吧…

c++字符串實現join方法,使用模板

c字符串實現join方法&#xff0c;使用模板 主要記錄下類成員函數&#xff0c;申明為模板函數的寫法 注意定義迭代器時&#xff0c;前面需要加上typename關鍵字 typename std::vector<T>::iterator it;#pragma once #include <vector> #include <string>clas…

java——Junit單元測試

測試分類 黑盒測試&#xff1a;不輸入代碼&#xff0c;給輸入值&#xff0c;看程序能夠給出期望的值。 白盒測試&#xff1a;寫代碼&#xff0c;關注程序具體執行流程。 JUnit單元測試 一個測試框架&#xff0c;供java開發人員編寫單元測試。 是程序員測試&#xff0c;即白…