搜索
首页后端开发C++进行字母频率攻击的单字母替代密码程序

进行字母频率攻击的单字母替代密码程序

The challenge is to display the top five probable plain texts which could be decrypted from the supplied monoalphabetic cypher utilizing the letter frequency attack from a string Str with size K representing the given monoalphabetic cypher.

Let us see what exactly is frequency attack.

频率分析的基础是确信特定的字母和字母组合在任何给定的书面语言部分中以不同的频率出现。此外,事实上,该语言的每个样本在字母分布上都有一个共同的模式。为了更清楚地说明,

英语字母表有26个字母,但并不是所有字母在书面英语中使用频率都相同。某些字母的使用频率是不同的。例如,如果你查看一本书或报纸上的字母,你会注意到字母E、T、A和O在英语单词中出现得非常频繁。然而,英语文本很少使用字母J、X、Q或Z。这个事实可以用来解密维吉尼亚密码的信息。术语"频率分析"就是指这种方法。

Each letter found in the plaintext is substituted with a different letter in a basic substitution cypher, and any given character in its plaintext is perpetually changed to an identical letter in the text of the cypher. A ciphertext message with several repetitions of the letter Y, for instance, would imply to the cryptanalyst that Y stands in for the letter a if every instance of the letter a are converted to the letter X.

示例示例1

Let us take string T,

按照英文字母在英语字母表中的降序连接形成的字符串。

String T=ETAOINSHRDLCUMWFGYPBVKJXQZ”
Given string Str = "SGHR HR SGD BNCD";
Output:
THIS IS THE CODE
FTUE UE FTQ OAPQ
LZAK AK LZW UGVW
PDEO EO PDA YKZA
IWXH XH IWT  RDST

问题陈述

实现一个程序,对单字母替代密码进行字母频率攻击。

Solution Approach

In Order to perform a letter frequency attack on a monoalphabetic substitution cipher, we take the following methodology.

The approach to solve this problem and to perform a letter frequency attack on a monoalphabetic substitution cipher is by applying frequency analysis.

One widely-known technique or a practice of breaking ciphertext is nothing but a frequency analysis. It is founded on research into how often and regular different letters or groupings of letters appear in ciphertexts. A variety of letters or alphabets are used at varying rates across all languages.

For example, take the word "APPLE". The frequency of the letter "A" is 1 since it is occured only one time, similarly the frequency of the letter "L" is 1 and the frequency of the letter "E" is also 1. But the frequency of the letter "P" is 2 since it is repeated two times.

这就是我们找到字母频率的方法。

考虑一下在典型的英文文本中每个字母出现的频率。最常出现的字母是E,其次是T,然后是A,依此类推,如果我们按照从高频到低频的顺序排列这些字母 −

"ETAOINSHRDLCUMWFGYPBVKJXQZ" 是按频率排序的完整字母列表。

Algorithm

在单字母替代密码上执行字母频率攻击的算法如下所示

  • 第一步 − 开始

  • 第二步 - 通过使用频率攻击或分析的方法定义解密单字母替代密码的函数

  • 步骤 3 − 存储最终的 5 个可行的解密明文

  • 第四步 − 存储密文中每个字母的频率

  • 步骤 5 - 遍历字符串 Str

  • 步骤 6 − 迭代一个范围为 [0, 5]

  • Step 7 − Iterate over a range of [0, 26]

  • 第8步 - 定义一个临时字符串"cur",以便逐个或在当前时间创建一个明文

  • Step 9 − Now create the ith plaintext by making use of the calculated shift

  • 第10步 − 将密码的第T个字母向右移动x个位置

  • 第11步 - 将第k个计算出的字母添加到临时字符串cur中

  • Step 12 − Print the output as the generated 5 possible plaintexts.

  • 步骤 13 − 停止

Example: C Program

以下是C程序实现的上述算法,用于对单字母替换密码进行字母频率攻击。

#include <stdio.h>
#include <string.h>
// Define a function to decrypt given monoalphabetic substitution cipher by implementing the method of frequency analysis or an attack
void printTheString(char Str[], int K){

   // this stores the final 5 feasible plaintext //which are deciphered
   char ptext[5][K+1];
   
   // the frequency of every letter in the
   // cipher text is stored
   int fre[26] = { 0 }; 
   
   // The letter frequency of the cipher text is stored in the order of descendence
   int freSorted[26]; 
   
   // this stores the used alphabet 
   int Used[26] = { 0 }; 
   
   // Traversing the given string named Str
   for (int i = 0; i < K; i++) {
      if (Str[i] != ' ') {
         fre[Str[i] - 'A']++;
      }
   } 
   
   // Copying the array of frequency
   for (int i = 0; i < 26; i++) {
      freSorted[i] = fre[i];
   } 
   
   //by concatenating the english letters in //decreasing frequency in the english alphabet , the string T is //obtained
   char T[] = "ETAOINSHRDLCUMWFGYPBVKJXQZ"; 
   
   // Sorting the array in the order of descendence
   for (int i = 0; i < 26; i++) {
      for (int j = i + 1; j < 26; j++) {
         if (freSorted[j] > freSorted[i]) {
            int temp = freSorted[i];
            freSorted[i] = freSorted[j];
            freSorted[j] = temp;
         }
      }
   } 
   
   // Iterating in the range between [0, 5]
   for (int i = 0; i < 5; i++) {
      int ch = -1; 
      
      // Iterating in the range between [0, 26]
      for (int m = 0; m < 26; m++) { 
         if (freSorted[i] == fre[m] && Used[m] == 0) {
            Used[m] = 1;
            ch = m;
            break;
         }
      }
      if (ch == -1)
         break; 
         
      //  here numerical equivalent of letter is stored ith index of array letter_frequency
      int x = T[i] - 'A'; 
      
      //  now probable shift is calculated in the monoalphabetic cipher
      x = x - ch; 
      
      // defining a temporary string cur to create one plaintext at a time or at the current time
      char cur[K+1]; 
      
      //  ith plaintext is generated by making use of the shift calculated 
      for (int T = 0; T < K; T++) { 
      
         // whitespaces is inserted without any //change
         if (Str[T] == ' ') {
            cur[T] = ' ';
            continue;
         } 
         
         // Shifting the Tth cipher letter by x we get
         int y = Str[T] - 'A';
         y =y+x; 
         if (y < 0)
            y =y+ 26;
         if (y > 25)
            y -=26; 
            
         // Adding the kth calculated letter to the temporary string cur 
         cur[T] = 'A' + y;        
      }
      cur[K] = '\0';
      
      // The ith feasible plaintext is printed
      printf("%s\n", cur);
   }
}
int main(){
   char Str[] = "SGHR HR SGD BNCD";
   int K = strlen(Str);
   printTheString(Str, K);
   return 0;
}

输出

THIS IS THE CODE
FTUE UE FTQ OAPQ
LZAK AK LZW UGVW
PDEO EO PDA YKZA
IWXH XH IWT RDST

结论

Likewise, we can obtain a solution to perform a letter frequency attack on a monoalphabetic substitution cipher.

在本文中,我们解决了获取程序来执行对单字母替换密码进行字母频率攻击的挑战。

在这里提供了C编程代码以及在单字母替换密码上执行字母频率攻击的算法。

以上是进行字母频率攻击的单字母替代密码程序的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:tutorialspoint。如有侵权,请联系admin@php.cn删除
C:死亡还是简单地发展?C:死亡还是简单地发展?Apr 24, 2025 am 12:13 AM

1)c relevantduetoItsAverity and效率和效果临界。2)theLanguageIsconTinuellyUped,withc 20introducingFeaturesFeaturesLikeTuresLikeSlikeModeLeslikeMeSandIntIneStoImproutiMimproutimprouteverusabilityandperformance.3)

C在现代世界中:应用和行业C在现代世界中:应用和行业Apr 23, 2025 am 12:10 AM

C 在现代世界中的应用广泛且重要。1)在游戏开发中,C 因其高性能和多态性被广泛使用,如UnrealEngine和Unity。2)在金融交易系统中,C 的低延迟和高吞吐量使其成为首选,适用于高频交易和实时数据分析。

C XML库:比较和对比选项C XML库:比较和对比选项Apr 22, 2025 am 12:05 AM

C 中有四种常用的XML库:TinyXML-2、PugiXML、Xerces-C 和RapidXML。1.TinyXML-2适合资源有限的环境,轻量但功能有限。2.PugiXML快速且支持XPath查询,适用于复杂XML结构。3.Xerces-C 功能强大,支持DOM和SAX解析,适用于复杂处理。4.RapidXML专注于性能,解析速度极快,但不支持XPath查询。

C和XML:探索关系和支持C和XML:探索关系和支持Apr 21, 2025 am 12:02 AM

C 通过第三方库(如TinyXML、Pugixml、Xerces-C )与XML交互。1)使用库解析XML文件,将其转换为C 可处理的数据结构。2)生成XML时,将C 数据结构转换为XML格式。3)在实际应用中,XML常用于配置文件和数据交换,提升开发效率。

C#vs. C:了解关键差异和相似之处C#vs. C:了解关键差异和相似之处Apr 20, 2025 am 12:03 AM

C#和C 的主要区别在于语法、性能和应用场景。1)C#语法更简洁,支持垃圾回收,适用于.NET框架开发。2)C 性能更高,需手动管理内存,常用于系统编程和游戏开发。

C#与C:历史,进化和未来前景C#与C:历史,进化和未来前景Apr 19, 2025 am 12:07 AM

C#和C 的历史与演变各有特色,未来前景也不同。1.C 由BjarneStroustrup在1983年发明,旨在将面向对象编程引入C语言,其演变历程包括多次标准化,如C 11引入auto关键字和lambda表达式,C 20引入概念和协程,未来将专注于性能和系统级编程。2.C#由微软在2000年发布,结合C 和Java的优点,其演变注重简洁性和生产力,如C#2.0引入泛型,C#5.0引入异步编程,未来将专注于开发者的生产力和云计算。

C#vs. C:学习曲线和开发人员的经验C#vs. C:学习曲线和开发人员的经验Apr 18, 2025 am 12:13 AM

C#和C 的学习曲线和开发者体验有显着差异。 1)C#的学习曲线较平缓,适合快速开发和企业级应用。 2)C 的学习曲线较陡峭,适用于高性能和低级控制的场景。

C#vs. C:面向对象的编程和功能C#vs. C:面向对象的编程和功能Apr 17, 2025 am 12:02 AM

C#和C 在面向对象编程(OOP)中的实现方式和特性上有显着差异。 1)C#的类定义和语法更为简洁,支持如LINQ等高级特性。 2)C 提供更细粒度的控制,适用于系统编程和高性能需求。两者各有优势,选择应基于具体应用场景。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境