經典密碼學和現代密碼學的結構及其主要區別(1)凱撒密碼——附py代碼

在這里插入圖片描述
密碼學是一門通過使用代碼和密碼來保護信息的藝術與科學,其歷史可以追溯到數千年前。古典密碼學代表了這一古老學科早期的篇章。早在計算機和現代加密算法出現之前,歷史上的各個文明就依靠巧妙的方法來保護機密、安全通信以及獲取戰略優勢。

古典密碼學植根于古代文化的智慧,在歷史的關鍵時刻對保護敏感信息發揮了關鍵作用。從古埃及的象形文字到凱撒密碼,從文藝復興時期的創新到美國獨立戰爭中的密碼學陰謀,古典密碼學構成了現代密碼學原理得以建立的歷史背景。

以下是古典密碼學的簡要歷史背景:

? 古代文明: 自古以來,密碼技術就被用于各種目的,包括軍事通信、外交以及保護敏感信息。最早有記錄的密碼學使用可以追溯到古埃及,當時象形文字有時會被加密以保護陵墓和紀念碑的內容。古希臘人也為古典密碼學做出了重大貢獻,像尤利烏斯·愷撒就使用簡單的替換密碼來保護敏感的軍事信息。

?中世紀歐洲: 在中世紀的歐洲,密碼學的使用與君主和軍事領袖開發的秘密代碼和密碼緊密相關。16 世紀布萊斯·德·維吉尼亞發明的維吉尼亞密碼是古典密碼學的一個顯著進步,在數百年間都被認為是無法破解的。

? 文藝復興和啟蒙時代: 文藝復興時期,人們對密碼學的興趣日益濃厚,學者和科學家在該領域取得了諸多進展。在啟蒙時代,密碼學成為外交通信和間諜活動的重要工具。

? 美國獨立戰爭: 美國獨立戰爭是古典密碼學的一個重要歷史背景。在戰爭期間,英美雙方都使用了各種密碼和密碼本。像托馬斯·杰斐遜這樣的知名人物也開發了自己的密碼系統,比如輪盤密碼機。

? 19 世紀及以后: 19 世紀見證了更先進密碼技術的發展,包括密碼本的使用和更復雜的替換密碼。在第二次世界大戰期間,古典密碼學發揮了重要作用,英國的“超機”計劃成功破譯了軸心國的通信。

在整個歷史背景下,古典密碼學作為一種保護敏感信息、維護機密性和在軍事及外交事務中獲取優勢的手段不斷發展。它為現代密碼學的后來發展奠定了基礎。

盡管古典密碼在歷史上具有重要意義,但它們缺乏保護現代數字通信和數據所必需的安全特性。隨著技術的進步,攻擊者的手段和能力也在增強,這使得古典密碼無法滿足當代的安全需求。基于可靠數學原理的現代密碼算法和協議旨在為數字時代提供強大的安全保障。

?

凱撒密碼 是最簡單且最早為人所知的加密技術之一。它以尤利烏斯·愷撒的名字命名,據說他曾用它來傳遞機密信息。它易于理解,但安全性不高,容易受到暴力破解和頻率分析的攻擊。

這種密碼是一種替換密碼,通過將字母表中的字母向前或向后移動固定位數來進行加密和解密。凱撒密碼的密鑰是“移位值”或“密鑰”,它決定了移位的量。例如,如果移位值為 3,那么 ‘A’ 將被加密為 ‘D’,‘B’ 被加密為 ‘E’,依此類推。而Z會繞回到C。比如明文"HELLO",移位3位,應該得到密文"KHOOR"。解密的話,移位-3位,恢復原文。如果移位位數超過26時應該對26取模,因為移位26位相當于沒有移位。

py示例代碼(僅供參考):

def caesar_cipher(text, shift, mode='encrypt'):"""凱撒密碼加密/解密函數:param text: 輸入文本:param shift: 移位值:param mode: 'encrypt' 加密 或 'decrypt' 解密:return: 處理后的字符串"""result = []# 處理解密模式if mode == 'decrypt':shift = -shiftfor char in text:if char.isalpha():# 確定字符類型的基礎ASCII碼base = ord('A') if char.isupper() else ord('a')# 計算新字符new_char = chr((ord(char) - base + shift) % 26 + base)result.append(new_char)else:# 非字母字符保持不變result.append(char)return ''.join(result)# 測試示例
if __name__ == "__main__":# 加密示例plain_text = "Hello, World! 2025"shift_amount = 3encrypted = caesar_cipher(plain_text, shift_amount)print(f"加密結果: {encrypted}")  # 輸出: Khoor, Zruog! 2025# 解密示例decrypted = caesar_cipher(encrypted, shift_amount, 'decrypt')print(f"解密結果: {decrypted}")  # 輸出: Hello, World! 2025# 處理大偏移量(自動取模)big_shift = 29  # 29 % 26 = 3encrypted_big = caesar_cipher(plain_text, big_shift)print(f"大偏移加密: {encrypted_big}")  # 輸出: Khoor, Zruog! 2025

運行結果:
在這里插入圖片描述
這里編寫了兩個函數,一個用于加密,另一個用于解密。另外,需要考慮字符的范圍,比如是否只處理大寫字母或小寫字母,或者同時處理兩者。還需要處理非字母字符,比如空格、標點符號,這些通常保持不變。

首先處理輸入的字符串。對于每個字符,如果是字母,就進行移位;如果不是,就保留原樣。移位的時候,需要注意大小寫,因為ASCII碼中大寫字母和小寫字母的編碼不同。比如,大寫字母A的ASCII碼是65,小寫字母a是97。移位的時候,可以使用模運算來處理繞回的情況。例如,對于一個字符char,移位shift,加密后的字符可以通過公式:new_char = chr((ord(char) - base + shift) % 26 + base),其中base是大寫或小寫字母的起始ASCII碼。

然后需要編寫加密函數,接收明文和移位位數,返回密文。解密函數則可以使用相同的邏輯,但移位位數為負數,或者直接調用加密函數并傳入負的移位位數。最后,需要一個主函數來讓用戶輸入文本和移位位數,并輸出加密或解密的結果。

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

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

相關文章

Python60日基礎學習打卡D30

回顧: 導入官方庫的三種手段導入自定義庫/模塊的方式導入庫/模塊的核心邏輯:找到根目錄(python解釋器的目錄和終端的目錄不一致) # 直接導入 from random import randint print(randint(1, 10)) # 導入自定義庫 import module m…

Linux利用多線程和線程同步實現一個簡單的聊天服務器

1. 概述 本文實現一個基于TCP/IP的簡單多人聊天室程序。它包含一個服務器端和一個客戶端:服務器能夠接收多個客戶端的連接,并將任何一個客戶端發來的消息廣播給所有其他連接的客戶端;客戶端則可以連接到服務器,發送消息并接收來自…

ubuntu系統 | dify+ollama+deepseek搭建本地應用

1、安裝 Ollama 下載并安裝 Ollama (llm) wangqiangwangqiang:~$ curl -fsSL https://ollama.ai/install.sh | bash >>> Installing ollama to /usr/local >>> Downloading Linux amd64 bundle0.3% curl -fsSL https://ollama.ai/install.sh (下…

從紙質契約到智能契約:AI如何改寫信任規則與商業效率??——從智能合約到監管科技,一場顛覆傳統商業邏輯的技術革命

一、傳統合同的“低效困境”:耗時、昂貴、風險失控 近年來,全球商業環境加速向數字化轉型,但合同管理卻成為企業效率的“阿喀琉斯之踵”。據國際商會(International Chamber of Commerce)數據顯示,全球企業…

【機器學習|學習筆記】基于生成對抗網絡的孿生框架(GAN-based Siamese framework,GSF)詳解,附代碼。

【機器學習|學習筆記】基于生成對抗網絡的孿生框架(GAN-based Siamese framework,GSF)詳解,附代碼。 【機器學習|學習筆記】基于生成對抗網絡的孿生框架(GAN-based Siamese framework,GSF)詳解,附代碼。 文章目錄 【機器學習|學習筆記】基于生成對抗網絡的孿生框架(G…

UEFI Spec 學習筆記---33 - Human Interface Infrastructure Overview---33.2.6 Strings

33.2.6 Strings UEFI 環境中的 string 是使用 UCS-2 格式定義,每個字符由 16bit 數據表示。對于用戶界面,strings 也是一種可以安裝到 HIIdatabase 的一種數據。 為了本土化,每個 string 通過一個唯一標識符來識別,而每一個標識…

Stable Diffusion 學習筆記02

模型下載網站: 1,LiblibAI-哩布哩布AI - 中國領先的AI創作平臺 2,Civitai: The Home of Open-Source Generative AI 模型的安裝: 將下載的sd模型放置在sd1.5的文件內即可,重啟客戶端可用。 外掛VAE模型&#xff1a…

并發編程(5)

拋異常時會釋放鎖。 當線程在 synchronized 塊內部拋出異常時,會自動釋放對象鎖。 public class ExceptionUnlockDemo {private static final Object lock new Object();public static void main(String[] args) {Thread t1 new Thread(() -> {synchronized …

貴州某建筑物擋墻自動化監測

1. 項目簡介 某建筑物位于貴州省某縣城區內,靠近縣城主干道,周邊配套學校、醫院、商貿城。建筑物臨近鳳凰湖、芙蓉江等水系,主打“湖景生態宜居”。改建筑物總占地面積:約5.3萬平方米;總建筑面積:約15萬平…

6個月Python學習計劃:從入門到AI實戰(前端開發者進階指南)

作者:一名前端開發者的進階日志 計劃時長:6個月 每日學習時間:2小時 覆蓋方向:Python基礎、爬蟲開發、數據分析、后端開發、人工智能、深度學習 📌 目錄 學習目標總覽每日時間分配建議第1月:Python基礎與編…

【FAQ】HarmonyOS SDK 閉源開放能力 —Vision Kit (3)

1.問題描述: 通過CardRecognition識別身份證拍照拿到的照片地址,使用該方法獲取不到圖片文件,請問如何解決? 解決方案: //卡證識別實現頁,文件名為CardDemoPage,需被引入至入口頁 import { …

AI全域智能監控系統重構商業清潔管理范式——從被動響應到主動預防的監控效能革命

一、四維立體監控網絡技術架構 1. 人員行為監控 - 融合人臉識別、骨骼追蹤與RFID工牌技術,身份識別準確率99.97% - 支持15米超距夜間紅外監控(精度0.01lux) 2. 作業過程監控 - UWB厘米級定位技術(誤差<0.3米&…

安全強化的Linux

SElinux簡介 SELinux是security-Enhanced Linux的縮寫,意思是安全強化的linux SELinux主要由美國國家安全局(NSA)開發,當初開發的目的是為了避免資源的誤用。傳統的訪問控制在我們開啟權限后,系統進程可以直接訪問 當我們對權限設置不嚴謹時,這種訪問方式就是系統的安全漏洞 在…

機器學習第十六講:K-means → 自動把超市顧客分成不同消費群體

機器學習第十六講:K-means → 自動把超市顧客分成不同消費群體 資料取自《零基礎學機器學習》。 查看總目錄:學習大綱 關于DeepSeek本地部署指南可以看下我之前寫的文章:DeepSeek R1本地與線上滿血版部署:超詳細手把手指南 K-me…

spring中yml配置上下文與tomcat等外部容器不一致問題

結論:外部優先級大于內部 在 application.yml 中配置了: server:port: 8080servlet:context-path: /demo這表示你的 Spring Boot 應用的上下文路徑(context-path)是 /demo,即訪問你的服務時,URL 必須以 /d…

論文研讀——《AnomalyGPT:使用大型視覺語言模型檢測工業異常》

這篇論文提出了 AnomalyGPT,一個基于大型視覺語言模型的工業異常檢測框架,首次將通用多模態對話能力引入工業視覺場景,通過引入圖像解碼器增強像素級感知,設計 Prompt 學習器實現任務自適應控制,并利用合成異常樣本解決…

供應鏈安全檢測系列技術規范介紹之一|軟件成分分析

軟件成分分析的概念及意義 軟件成分分析Software Compostition Analysis(SCA)是一種用于管理開源組件應用安全的方法。軟件成分分析系統可以快速跟蹤和分析應用軟件的開源組件,發現相關組件、支持庫以及它們之間直接和間接依賴關系&#xff0…

conda更換清華源

1、概覽 anaconda更換速度更快、更穩定的下載源,在linux環境測試通過。 2、conda源查看 在修改之前可以查看下現有conda源是什么,查看conda配置信息,如下: cat ~/.condarc 可以看到你的conda源,以我的conda源舉例&am…

Docker配置容器開機自啟或服務重啟后自啟

要將一個 Docker 容器設置為開機自啟,你可以使用 docker update 命令或配置 Docker 服務來實現。以下是兩種常見的方法: 方法 1:使用 docker update 設置容器自動重啟 使用 docker update 設置容器為開機自啟 你可以使用以下命令&#xff0c…

Flink 的水印機制

Apache Flink 的 水印機制(Watermark Mechanism) 主要用于解決 事件時間流中的亂序問題(Out-of-Order Events),確保窗口(Window)能夠在合適的時間觸發計算,從而提供準確、一致的處理…