Lab 2.zip

  • losyash
    了解作者
  • C#
    开发工具
  • 75KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2021-04-18 00:12
    上传日期
RSA, wiener attack porgrams
Lab 2.zip
内容介绍
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Numerics; using System.IO; namespace Z_2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Random rnd = new Random((int)DateTime.Now.Millisecond); //функция генерации М-последовательности с n элементами private string M_seq(int n) { string M = ""; string c = textBox1.Text; BigInteger registr = strToBI(c); BigInteger bit = 0; for (int i = 0; i < n; i++) { M += 1 & registr; int count_m = M.Length; bit = (((1 << 30) & registr) >> 30) ^ (((1 << 2) & registr) >> 2); registr = (bit << 30) | (registr >> 1); } return M; } //функция перевода строкового типа в BigInteger private BigInteger strToBI(string n) { BigInteger num = 0; for (int i = 0; i < n.Length; i++) { num = ((num << 1) | ((int)n[i] - 48)); } return num; } //Вычисление критерия Пирсона private double x2(int[] freq) { double x = 0; double teor_freq = freq.Sum() / (double)freq.Length; for (int i = 0; i < freq.Length; i++) { x += Math.Pow(freq[i] - teor_freq, 2) / teor_freq; } x = Math.Round(x, 3); return x; } //корреляционный тест private void cor_test(string M) { double S_x = 0, S_y = 0, D_x = 0, D_y = 0, R = 0, R_mod = 0; int offset = Convert.ToInt32(textBox2.Text); int l = M.Length - offset; for (int i = 0; i < M.Length - offset; i++) S_x += M[i]; S_x = S_x / (l); for (int i = offset; i < M.Length; i++) S_y += M[i]; S_y = S_y / l; for (int i = 0; i < M.Length - offset; i++) D_x += Math.Pow((M[i] - S_x), 2); D_x = D_x / (l - 1); for (int i = offset; i < M.Length; i++) D_y += Math.Pow((M[i] - S_y), 2); D_y = D_y / (l - 1); for (int i = 0; i < M.Length - offset; i++) R += (M[i] - S_x) * (M[i + offset] - S_y); R = R / (l * Math.Sqrt(D_x * D_y)); double root = Math.Sqrt(l * (double)(l - 3) / (l + 1)); double two_add = (double)2 / (l - 2); R_mod = (double)1 / (l - 1) + two_add * root; if (Math.Abs(R) <= R_mod) { textBox4.Text = Math.Abs(Math.Round(R, 3)) + " <= " + Math.Round(R_mod, 3); label12.Text = "Тест пройден"; } else { textBox4.Text = Math.Abs(Math.Round(R, 3)) + " <= " + Math.Round(R_mod, 3); label12.Text = "Тест не пройден"; } } //сериальный тест private void ser_test(string M) { dataGridView1.Rows.Clear(); int serial = Convert.ToInt32(comboBox1.Text); Dictionary<string, int> freq = new Dictionary<string, int>(); for (int i = 0; i < Math.Pow(2, serial); i++) { string key = Convert.ToString(i, 2); while (key.Length != serial) key = "0" + key; freq.Add(key, 0); } for (int i = 0; i < (M.Length - (M.Length % serial)) / serial; i++) { string substr = M.Substring(serial * i, serial); freq[substr]++; } foreach (string key in freq.Keys) { dataGridView1.Rows.Add(key, freq[key]); } double xi2 = x2(freq.Values.ToArray<int>()); textBox7.Text = Convert.ToString(xi2); double[][] level = new double[][] { new double[] { 0.352, 2.167, 7.261 }, new double[] {0.584, 2.833, 8.547 }, new double[] {6.251, 12.017,22.307 }, new double[]{7.815, 14.067, 24.996 }}; // string limit_up = comboBox2.Text; string limit_down = comboBox3.Text; //double high_crit_x2 = 0; double low_crit_x2 = 0; //if (limit_up == "0.05") // high_crit_x2 = level[3][serial - 2]; // else high_crit_x2 = level[2][serial - 2]; if (limit_down == "0.95") low_crit_x2 = level[0][serial - 2]; else low_crit_x2 = level[1][serial - 2]; textBox6.Text = Convert.ToString(low_crit_x2); // textBox5.Text = Convert.ToString(high_crit_x2); if (low_crit_x2 < xi2 && xi2< high_crit_x2) label9.Text = "Тест пройден"; else label9.Text = "Тест не пройден"; } //запись в файл начального состояния private void button1_Click(object sender, EventArgs e) { string c = textBox1.Text; File.WriteAllText("key.txt", c); } //выгрузка из файла начального состояния private void button2_Click(object sender, EventArgs e) { string c = File.ReadAllText("key.txt"); textBox1.Text = c; } //генерация начального состояния private void button3_Click(object sender, EventArgs e) { textBox1.Text = ""; string c = ""; byte[] buff = new byte[4]; BigInteger x = 0; while (x == 0) { rnd.NextBytes(buff); x = new BigInteger(buff); } for(int i = 0; i < 31; i++) { int bit = (int)((x >> i) & 1); c = Convert.ToString(bit) + c; } textBox1.Text = c; } //генерация М-последовательности private void button4_Click(object sender, EventArgs e) { int n_count = Convert.ToInt32(textBox3.Text); string M = M_seq(n_count); richTextBox1.Text = M; } //Проведение корреляционного теста М-последовательности private void button5_Click(object sender, EventArgs e) { string M = richTextBox1.Text; M = M.Substring(62); cor_test(M); } //Проведение сериального теста М-последовательности private void button6_Click(object sender, EventArgs e) { string M = richTextBox1.Text; M = M.Substring(62); ser_test(M); } //Шифрование файла М-последовательностью private void button7_Click(object sender, EventArgs e) { byte origin_file; BinaryReader br1 = new BinaryReader(File.OpenRead("text.txt")); BinaryWriter bw = new BinaryWriter(File.OpenWrite("encoded.txt")); string M = M_seq((int)br1.BaseStream.Length * 8); byte[] key = strToBI(M).ToByteArray(); int k = 0; while (br1.BaseStream.Position != br1.BaseStream
评论
    相关推荐
    • rsa.zip
      Testing Schnorr's relation finding algorithm with n on RSA-moduli ofbits
    • RSA.rar
      实现RSA的加密解密,使用java。在程序中输入加密字段。
    • RSA.rar
      RSA算法加密和解密,代码简洁易懂,附有说明。
    • rsa.rar
      实现rsa算法运用vc++软件完美实现。。。。。。。。。。。。。。
    • RSA Algorithm.rar
      RSA算法为非对称加密算法,进行加密和解密的操作需要有两个密钥,这两个秘钥分别为公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。公开密钥和私有密钥为一对,如果对数据进行加密使用公开...
    • RSA2.0.zip
      RSA加密解密的c语言实现方案,C language implementation of RSA encryption and decryption
    • rsa.rar
      基于C#的RSA 加签验签测试工具源代码。
    • rsa.zip
      rsa2048位程序,RISCV架构,基于Botan库
    • RSA.zip
      int整数范围内的RSA算法,c语言实现
    • RSA.zip
      简单实现了RSA算法加密以及解密,不涉及文件读写。