数据加密-AES数据加密WPF程序

 AES(Advanced Encryption Standard)是一种广泛使用的对称密钥加密算法,由美国国家标准与技术研究院(NIST)于2001年发布。AES以其高效、安全的特点,在数据加密领域占据了重要地位。

 

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="50"/>
        <RowDefinition Height="350"/>
        <RowDefinition Height="50"/>
    </Grid.RowDefinitions>
    <Grid Grid.Row="0">
        <TextBlock Text="密码转译" FontSize="20" FontWeight="Bold" Margin="10"/>
    </Grid>
    <Grid Grid.Row="1">
        <Grid>
            <Grid.RowDefinitions >
                <RowDefinition Height="10*"/>
                <RowDefinition Height="70*"/>
                <RowDefinition Height="50*"/>
                <RowDefinition Height="80*"/>
                <RowDefinition Height="120*"/>
                <RowDefinition Height="60*"/>

            </Grid.RowDefinitions>

            <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                <TextBlock Text="源码"  Margin="0,6,5,0"  FontSize="15" FontWeight="Bold"/>
                <TextBox Name="InPutA" Width="210" Height="30" Margin="0,0,15,0" VerticalContentAlignment="Center"/>
            </StackPanel>
            <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                <TextBlock Text="解密"  Margin="0,6,5,0"  FontSize="15" FontWeight="Bold"/>
                <TextBox Name="OutPutB" Width="210" Height="30" Margin="0,0,15,0" VerticalContentAlignment="Center"/>

            </StackPanel>

            <StackPanel Grid.Row="3" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
                <Button Content="加密"  Background="#0047AB" Foreground="White"  FontSize="15"  HorizontalAlignment="Right"  
                        Width="200" Height="27" Margin="0,0,0,0" BorderThickness="0"
                        Click="EncryptCommande"/>
                <Button Content="解密"  Background="#00ad43" Foreground="White"  FontSize="15"  HorizontalAlignment="Right"  
                        Width="200" Height="27" Margin="0,5,0,0" BorderThickness="0"
                        Click="DecryptCommande"/>
            </StackPanel>

            <StackPanel Grid.Row="4" Height="30" Width="260" Orientation="Horizontal"  VerticalAlignment="Bottom" Margin="0 0 0 10">
                <Button Width="40" Click="P1" Content="P1" Foreground="#c8c8c8" BorderThickness="0" Background="#f8f8f8"  Margin="25 0 15 0"/>
                <Button Width="40" Click="P2" Content="P2" Foreground="#c8c8c8" BorderThickness="0" Background="#f8f8f8"  Margin="0 0 15 0"/>
                <Button Width="40" Click="P3" Content="P3" Foreground="#c8c8c8" BorderThickness="0" Background="#f8f8f8"  Margin="0 0 15 0"/>
                <Button Width="40" Click="P4" Content="Rand" Foreground="#c8c8c8" BorderThickness="0" Background="#f8f8f8"  Margin="0 0 15 0"/>
            </StackPanel>


            <StackPanel Grid.Row="5">
                <StackPanel  Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                    <TextBlock Text="KEY:"  Margin="0,2,5,0"  FontSize="10" Foreground="#808080"/>
                    <TextBox Name="Key" Width="210" Height="17" Margin="0,0,15,0" VerticalContentAlignment="Center" />
                </StackPanel>
                <StackPanel  Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                    <TextBlock Text="  I V:"  Margin="0,8,5,0"  FontSize="10" Foreground="#808080"/>
                    <TextBox Name="IV" Width="210" Height="17" Margin="0,6,15,0" VerticalContentAlignment="Center"/>
                </StackPanel>
            </StackPanel>
        </Grid>
    </Grid>

    <TextBox Grid.Row="2" Name="Time" Height="17" Width="200" Margin="0 10 15 15"  FontSize="13" HorizontalAlignment="Right" BorderThickness="0" HorizontalContentAlignment="Right"/>

</Grid>
 public partial class MainWindow : Window
 {

     private DispatcherTimer _timer;
     public MainWindow()
     {
         InitializeComponent();
         _timer = new DispatcherTimer();
         _timer.Interval = TimeSpan.FromSeconds(0.5); // 每0.5秒切换一次颜色  
         _timer.Tick += Timer_Tick; // 设置Tick事件处理程序  
         _timer.Start(); // 启动定时器 


     }

     private void Timer_Tick(object sender, EventArgs e)
     {
         Time.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
         
     }

     private void EncryptCommande(object sender, RoutedEventArgs e)
     {
         byte[] key = Encoding.UTF8.GetBytes(Key.Text);
         byte[] iv = Encoding.UTF8.GetBytes(IV.Text);
         if (key.Length != 32) 
         {
             MessageBox.Show("Key错误\n请输入32位数字AES密钥", "警告");
         }else
         {
             if (iv.Length != 16) {
                 MessageBox.Show("IV错误\n请输入16位数字IV", "警告");
             }
             else
             {
                 // 输入的15位数字  
                 string input = InPutA.Text;

                 // 加密  
                 string encryptedText = Encrypt(input, key, iv);
                 OutPutB.Text = encryptedText;
             }
         }


        

     }
     private void DecryptCommande(object sender, RoutedEventArgs e)
     {
         byte[] key = Encoding.UTF8.GetBytes(Key.Text);
         byte[] iv = Encoding.UTF8.GetBytes(IV.Text);
         if (key.Length != 32)
         {
             MessageBox.Show("Key错误\n请输入32位数字AES密钥", "警告");
         }
         else
         {
             if (iv.Length != 16)
             {
                 MessageBox.Show("IV错误\n请输入16位数字IV", "警告");
             }
             else
             {
                 string input = InPutA.Text;
                 Regex regex = new Regex(@"[\u4e00-\u9fa5]+");
                 if (regex.IsMatch(input))
                 {
                     MessageBox.Show("输入错误\n待破解内容含有未知字符", "警告");
                 }
                 else
                 {
                     //解密  
                     string decryptedText = Decrypt(input, key, iv);
                     OutPutB.Text = decryptedText;
                 }



                
             }
         }
     }


     static string Encrypt(string plainText, byte[] Key, byte[] IV)
     {
         byte[] encrypted;

         using (Aes aesAlg = Aes.Create())
         {
             aesAlg.Key = Key;
             aesAlg.IV = IV;

             ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

             using (MemoryStream msEncrypt = new MemoryStream())
             {
                 using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                 {
                     using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                     {
                         swEncrypt.Write(plainText);
                     }
                     encrypted = msEncrypt.ToArray();
                 }
             }
         }

         return Convert.ToBase64String(encrypted);
     }

     static string Decrypt(string cipherText, byte[] Key, byte[] IV)
     {
         cipherText = cipherText.Replace(" ", "+"); // 处理Base64中的空格问题  

         byte[] cipherBytes = Convert.FromBase64String(cipherText);

         using (Aes aesAlg = Aes.Create())
         {
             aesAlg.Key = Key;
             aesAlg.IV = IV;

             ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

             using (MemoryStream msDecrypt = new MemoryStream(cipherBytes))
             {
                 using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                 {
                     using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                     {
                         return srDecrypt.ReadToEnd();
                     }
                 }
             }
         }
     }

     private void P1(object sender, RoutedEventArgs e)
     {
         Key.Text = "12345678901234567890123456789012";
         IV.Text = "1234567890123456";
     }
     private void P2(object sender, RoutedEventArgs e)
     {
         Key.Text = "12345678901234567890123456789012";
         IV.Text = "1234567890123456";
     }
     private void P3(object sender, RoutedEventArgs e)
     {
         Key.Text = "12345678901234567890123456789012";
         IV.Text = "1234567890123456";
     }
     private void P4(object sender, RoutedEventArgs e)
     {
         Key.Text = DigitalGeneration(32);
         IV.Text = DigitalGeneration(16);
     }

     static string DigitalGeneration(int A)
     {
         Random rand = new Random();
         StringBuilder sb = new StringBuilder(A);  
         for (int i = 0; i < A; i++){
             sb.Append(rand.Next(0, 10));}
         string randomNumbers = sb.ToString(); 
         return randomNumbers;
     }
 }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值