經典密碼學和現代密碼學的結構及其主要區別(1)維吉尼亞密碼—附py代碼

Vigenère cipher 維吉尼亞密碼

維吉尼亞密碼由布萊斯·德·維吉尼亞在 16 世紀發明,是凱撒密碼的一個更復雜的擴展。它是一種多字母替換密碼,使用一個關鍵字來確定明文中不同字母的多個移位值。

與凱撒密碼不同,凱撒密碼對所有字母都有固定的偏移量,而維吉尼亞密碼使用一個重復的關鍵詞為消息中的每個字母創建不同的偏移量。這使其更能抵御頻率分析,但如果消息的一部分已知,它仍然容易受到已知明文攻擊。維吉尼亞密碼曾被認為相當安全,但用現代密碼分析技術可以破解。

凱撒密碼和維吉尼亞密碼都是早期加密方法的歷史實例。雖然它們易于理解,并在密碼學史上發揮了重要作用,但它們缺乏現代加密應用所需的強大安全性,不適合保護敏感的數字信息。

維吉尼亞密碼的主要特點

  • 密鑰。維吉尼亞密碼使用一個關鍵字或短語作為加密和解密消息的密鑰。關鍵字可以是任意長度,并通常重復以匹配明文的長度。
  • 多字母表密碼。與凱撒密碼不同,凱撒密碼對所有字符使用固定的移位值,維吉尼亞密碼采用多字母表的方法。這意味著消息的不同部分可能會有不同的移位量,使其更復雜且更安全。
  • 字母表。為了執行加密和解密,使用維吉尼亞表(也稱為維吉尼亞方陣或正方形表)。該表由多個字母表的行和列組成,每行代表不同的凱撒密碼移位。

? 加密過程

  1. 要加密一條消息,您需要將明文和關鍵詞對齊。
  2. 對于明文中的每個字母,您都要在維吉尼亞密碼表中找到由密鑰中相應字母所確定的行。
  3. 然后找到與你想要加密的明文字母相對應的那一列。
  4. 行與列的交叉點即為密文字母。
  5. 對明文中的每個字母重復此過程。

? 解密過程

  1. 用維吉尼亞密碼進行解密的過程與加密正好相反。
  2. 將密文與關鍵詞對齊,就像加密時那樣。
  3. 對于密文中的每個字母,根據關鍵字中的相應字母在維吉尼亞密碼表中找到對應的行。
  4. 找到包含密文字母的那一列。
  5. 行與列的交叉點給出的就是明文字母。
  6. 對密文中的每個字母都重復此過程。

維吉尼亞密碼比簡單的凱撒密碼更安全,因為它通過密鑰引入了變化性。這使得頻率分析和暴力破解攻擊更具挑戰性。但維吉尼亞密碼的安全性仍然有限,尤其是在使用較短密鑰時。較長的密鑰能提高安全性。它容易受到卡西斯基檢驗的攻擊,一種能夠幫助識別密文中重復模式的技術,并有可能揭示有關密鑰長度的信息。

🔹🔹🔹

假設有 m = 7 ,且關鍵字為 PHYSICS。對應于數值等價 K = (8, 0, 17, 11, 1, 21, 11)。

C i = ( M i + K i m o d m ) m o d 26 C_i = (M_i + K_{i \mod m}) \mod 26 Ci?=(Mi?+Kimodm?)mod26 其中 M i M_i Mi?為明文字母數值(A=0), K j K_j Kj?為密鑰字母數值, m m m為密鑰長度。

  • m m m:密鑰長度(此處 m = 7 )
  • M i M_i Mi?:明文中第 i 個字符的數值( a=0, b=1,…, z=25 )
  • K j K_j Kj?:密鑰中第j個字符的數值( j = i mod m )
  • C i C_i Ci?:密文中第i個字符的數值

在這里插入圖片描述
密文結果為:uaitvntclzlohtpazwfnncpyjtdnabfzl

解密時將使用相同的關鍵字,但要從密文中減去它,而不是加上它。

例如:

明文 m(索引: i = 0 ):

C i C_i Ci? = (12 + 8) mod 26 = 20

密文是: u

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

plaintext = "mariusiulianmihailescuphysicsbook"
key = [8, 0, 17, 11, 1, 21, 11]
ciphertext = []for i, char in enumerate(plaintext):# 將明文字符轉換為0-25的數值p = ord(char) - ord('a')# 獲取對應的密鑰k = key[i % 7]# 加密并轉換回字符encrypted_char = chr((p + k) % 26 + ord('a'))ciphertext.append(encrypted_char)# 將密文字符列表轉換為字符串
ciphertext_str = ''.join(ciphertext)
print(ciphertext_str)

運行結果:
在這里插入圖片描述

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

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

相關文章

Ubuntu部署私有Gitlab

這個東西安裝其實挺簡單的,但是因為我這邊遷移了數據目錄和使用自己安裝的 nginx 代理還是踩了幾個坑,所以大家可以注意下 先看下安裝 # 先安裝必要組件 sudo apt update sudo apt install -y curl openssh-server ca-certificates tzdata perl# 添加gi…

【JVM 02-JVM內存結構之-程序計數器】

程序計數器 筆記記錄 1. 定義2. 作用3. 特點4. 拓展理解4.1 PC寄存器存儲字節碼指令地址有什么用?4.2 PC寄存器為什么被設定為線程私有的?4.3 為什么執行native方法時,是undefined? 學習資料來源-b站黑馬JVM& 尚硅谷JVM精講與…

【node.js】數據庫與存儲

個人主頁:Guiat 歸屬專欄:node.js 文章目錄 1. 數據庫概述1.1 數據庫在Node.js中的作用1.2 Node.js支持的數據庫類型 2. 關系型數據庫集成2.1 MySQL與Node.js2.1.1 安裝MySQL驅動2.1.2 建立連接2.1.3 執行CRUD操作 2.2 PostgreSQL與Node.js2.2.1 安裝pg驅…

Windows10和Ubuntu24.04安裝Dify

1、win10上安裝docker不順利 參考:Dify的安裝_dify安裝-CSDN博客等資料,Dify依賴Docker運行,在Win10上安裝Docker,先安裝wsl。在PowerShell(管理員)中輸入: wsl --install 或顯示“找不到指定文件”,或顯示…

電網絕緣子及破損、閃絡缺陷YOLO數據集

概述 電網絕緣子及破損、閃絡缺陷YOLO數據集??,專為輸電線路缺陷檢測任務設計,可幫助開發者快速構建智能化識別模型。 主要內容 ??數據集規模?? 訓練集:2004張標注圖像驗證集:907張標注圖像所有數據均經過嚴格篩選與標注&…

5.2.4 wpf中MultiBinding的使用方法

在 WPF 中,MultiBinding 允許將多個綁定(Binding)組合成一個邏輯結果,并通過一個轉換器(IMultiValueConverter)處理這些值,最終影響目標屬性。以下是其核心用法和示例: 核心組件: MultiBinding:定義多個綁定源的集合。 IMultiValueConverter:實現邏…

基于SpringBoot+Vue的足球青訓俱樂部管理后臺系統的設計與開發

項目背景與概述 隨著足球青訓行業的快速發展,如何高效、規范地管理學員、教練以及課程等日常工作,成為了青訓俱樂部運營的重要課題。為了提升俱樂部的管理效率與用戶體驗,基于 Spring Boot 和 Vue.js 開發了一個 足球青訓俱樂部管理后臺系統…

互聯網大廠Java求職面試:云原生架構與AI應用集成解決方案

互聯網大廠Java求職面試:云原生架構與AI應用集成解決方案 場景一:短視頻與直播平臺的高并發架構設計 面試官提問 面試官(技術總監): 鄭薪苦,你有處理過千萬級用戶同時在線的直播系統嗎?如何設…

RK3588 Opencv-ffmpeg-rkmpp-rkrga編譯與測試

RK3588 Opencv-ffmpeg-rkmpp-rkrga編譯與測試 硬件背景說明編譯環境準備1. 編譯MPP(媒體處理平臺)2. 編譯RGA(圖形加速庫)3. 構建支持硬件加速的FFmpeg重要代碼修改說明4. 驗證安裝5.FFmpeg轉碼測試OpenCV編譯集成Python OpenCV+FFmpeg測試硬件背景說明 RK3588是瑞芯微推出…

解鎖C++遞歸算法:從原理到實戰

遞歸算法初相識 ** 在 C 的奇妙世界里,遞歸算法就像是一把神奇的鑰匙,能夠開啟解決復雜問題的大門。那么,究竟什么是遞歸算法呢?簡單來說,遞歸算法就是一種函數調用自身的編程技巧。當一個函數在其定義中直接或間接地…

vue2+webpack環境變量配置

第一步:創建3個環境變量文件 1、創建> 生產(本地)環境 .env.development # 開發環境 ENVdevelopment VUE_APP_MEDIA_BASE調后端請求的地址2、創建> 測試環境 .env.staging # 測試環境 ENVstaging VUE_APP_MEDIA_BASE調后端請求的地址…

【通用智能體】Intelligent Internet Agent (II-Agent):面向復雜網絡任務的智能體系統深度解析

Intelligent Internet Agent (II-Agent):面向復雜網絡任務的智能體系統深度解析 一、系統架構與設計哲學1.1 核心架構設計1.2 技術創新點1.2.1 動態任務分配機制1.2.2 網絡狀態感知模塊 二、系統架構解析2.1 完整工作流程2.2 性能指標對比 三…

力扣第450場周賽

Q1. 數位和等于下標的最小下標 給你一個整數數組 nums 。 返回滿足 nums[i] 的數位和(每一位數字相加求和)等于 i 的 最小 下標 i 。 如果不存在滿足要求的下標,返回 -1 。 示例 1: 輸入:nums [1,3,2] 輸出&#xff1…

【氮化鎵】偏置對GaN HEMT 單粒子效應的影響

2025年5月19日,西安電子科技大學的Ling Lv等人在《IEEE Transactions on Electron Devices》期刊發表了題為《Single-Event Effects of AlGaN/GaN HEMTs Under Different Biases》的文章,基于實驗和TCAD仿真模擬方法,研究了單粒子效應對關斷狀態、半開啟狀態和開啟狀態下AlG…

湖北理元理律師事務所債務優化方案:讓還款與生活平衡成為可能

在現代社會,債務問題已經成為影響許多家庭生活質量的重要因素。如何在不影響基本生活的前提下合理規劃還款,是眾多債務人面臨的實際難題。湖北理元理律師事務所推出的債務優化服務,正是針對這一需求而設計的專業解決方案。 該所的債務優化方…

FastJson1.2.24反序列化原理

{"type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://wmqlgxtbil.yutu.eu.org:9999/Exploit", "autoCommit":true} 測試執行 DNS解析記錄 利用JNDI工具進行注入 復現流程 java -jar JNDI-Injection-Explo…

基于Android的點餐系統_springboot+vue

開發語言:Java框架:springboot AndroidJDK版本:JDK1.8服務器:tomcat7數據庫:mysql 5.7數據庫工具:Navicat12開發軟件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 系統展示 APP登錄…

Maven 項目介紹

一、Maven 概述? Maven 是一個基于 Java 的項目管理和構建自動化工具,由 Apache 軟件基金會開發。它采用 “約定優于配置”(Convention Over Configuration)的原則,通過標準化的項目結構和配置,極大地簡化了項目的構建…

人工智能+:職業技能培訓的元命題與能力重構

當“人工智能”成為各行各業的熱門命題時,我們似乎跳過了一個更根本的思考:人類究竟需要怎樣的AI能力?這個問題不解決,任何技術賦能都可能淪為無本之木。真正的挑戰不在于如何應用AI,而在于如何定義人與AI的能力邊界—…

相同,對稱,平衡,右視圖(二叉樹)

本篇基于b站靈茶山艾府。 100. 相同的樹 給你兩棵二叉樹的根節點 p 和 q ,編寫一個函數來檢驗這兩棵樹是否相同。 如果兩個樹在結構上相同,并且節點具有相同的值,則認為它們是相同的。 示例 1: 輸入:p [1,2,3], q…