


Program sifir penggantian satu huruf untuk serangan kekerapan huruf
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编程代码以及在单字母替换密码上执行字母频率攻击的算法。
Atas ialah kandungan terperinci Program sifir penggantian satu huruf untuk serangan kekerapan huruf. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Struktur Data Bahasa C: Perwakilan data pokok dan graf adalah struktur data hierarki yang terdiri daripada nod. Setiap nod mengandungi elemen data dan penunjuk kepada nod anaknya. Pokok binari adalah jenis pokok khas. Setiap nod mempunyai paling banyak dua nod kanak -kanak. Data mewakili structtreenode {intData; structtreenode*left; structtreenode*right;}; Operasi mewujudkan pokok traversal pokok (predecision, in-order, dan kemudian pesanan) Node Node Carian Pusat Node Node adalah koleksi struktur data, di mana unsur-unsur adalah simpul, dan mereka boleh dihubungkan bersama melalui tepi dengan data yang betul atau tidak jelas yang mewakili jiran.

Kebenaran mengenai masalah operasi fail: Pembukaan fail gagal: Kebenaran yang tidak mencukupi, laluan yang salah, dan fail yang diduduki. Penulisan data gagal: Penampan penuh, fail tidak boleh ditulis, dan ruang cakera tidak mencukupi. Soalan Lazim Lain: Traversal fail perlahan, pengekodan fail teks yang salah, dan kesilapan bacaan fail binari.

Fungsi bahasa C adalah asas untuk modularization kod dan bangunan program. Mereka terdiri daripada pengisytiharan (tajuk fungsi) dan definisi (badan fungsi). Bahasa C menggunakan nilai untuk lulus parameter secara lalai, tetapi pembolehubah luaran juga boleh diubahsuai menggunakan lulus alamat. Fungsi boleh mempunyai atau tidak mempunyai nilai pulangan, dan jenis nilai pulangan mestilah selaras dengan perisytiharan. Penamaan fungsi harus jelas dan mudah difahami, menggunakan nomenclature unta atau garis bawah. Ikuti prinsip tanggungjawab tunggal dan pastikan kesederhanaan fungsi untuk meningkatkan kebolehkerjaan dan kebolehbacaan.

Pengiraan C35 pada dasarnya adalah matematik gabungan, yang mewakili bilangan kombinasi yang dipilih dari 3 dari 5 elemen. Formula pengiraan ialah C53 = 5! / (3! * 2!), Yang boleh dikira secara langsung oleh gelung untuk meningkatkan kecekapan dan mengelakkan limpahan. Di samping itu, memahami sifat kombinasi dan menguasai kaedah pengiraan yang cekap adalah penting untuk menyelesaikan banyak masalah dalam bidang statistik kebarangkalian, kriptografi, reka bentuk algoritma, dll.

Definisi nama fungsi bahasa C termasuk: jenis nilai pulangan, nama fungsi, senarai parameter dan badan fungsi. Nama fungsi harus jelas, ringkas dan bersatu dalam gaya untuk mengelakkan konflik dengan kata kunci. Nama fungsi mempunyai skop dan boleh digunakan selepas pengisytiharan. Penunjuk fungsi membolehkan fungsi diluluskan atau ditugaskan sebagai hujah. Kesalahan umum termasuk konflik penamaan, ketidakcocokan jenis parameter, dan fungsi yang tidak diisytiharkan. Pengoptimuman prestasi memberi tumpuan kepada reka bentuk dan pelaksanaan fungsi, sementara kod yang jelas dan mudah dibaca adalah penting.

C Language Multithreading Programming Guide: Mencipta Threads: Gunakan fungsi pthread_create () untuk menentukan id thread, sifat, dan fungsi benang. Penyegerakan Thread: Mencegah persaingan data melalui mutexes, semaphores, dan pembolehubah bersyarat. Kes praktikal: Gunakan multi-threading untuk mengira nombor Fibonacci, menetapkan tugas kepada pelbagai benang dan menyegerakkan hasilnya. Penyelesaian Masalah: Menyelesaikan masalah seperti kemalangan program, thread stop responses, dan kesesakan prestasi.

F Fungsi bahasa adalah blok kod yang boleh diguna semula. Mereka menerima input, melakukan operasi, dan hasil pulangan, yang secara modular meningkatkan kebolehgunaan dan mengurangkan kerumitan. Mekanisme dalaman fungsi termasuk parameter lulus, pelaksanaan fungsi, dan nilai pulangan. Seluruh proses melibatkan pengoptimuman seperti fungsi dalam talian. Fungsi yang baik ditulis mengikut prinsip tanggungjawab tunggal, bilangan parameter kecil, penamaan spesifikasi, dan pengendalian ralat. Penunjuk yang digabungkan dengan fungsi dapat mencapai fungsi yang lebih kuat, seperti mengubahsuai nilai pembolehubah luaran. Pointer fungsi meluluskan fungsi sebagai parameter atau alamat kedai, dan digunakan untuk melaksanakan panggilan dinamik ke fungsi. Memahami ciri dan teknik fungsi adalah kunci untuk menulis program C yang cekap, boleh dipelihara, dan mudah difahami.

Bagaimana untuk mengeluarkan undur di C? Jawapan: Gunakan pernyataan gelung. Langkah -langkah: 1. Tentukan pembolehubah N dan simpan nombor undur ke output; 2. Gunakan gelung sementara untuk terus mencetak n sehingga n adalah kurang dari 1; 3. Dalam badan gelung, cetak nilai n; 4. Pada akhir gelung, tolak n dengan 1 untuk mengeluarkan timbal balik yang lebih kecil seterusnya.
