C#实现简单的3DES加密解密功能示例

这篇文章主要介绍了C#实现简单的3DES加密解密功能,结合实例形式分析了C#实现3DES加密解密的定义、使用等具体步骤与相关操作技巧,需要的朋友可以参考下

本文实例讲述了C#实现简单的3DES加密解密功能。分享给大家供大家参考,具体如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.IO;
namespace _3DES
{
   public partial class Form1 : Form
   {
     public Form1()
     {
       InitializeComponent();
     }
     private void CrypeBtn_Click( object sender, EventArgs e)
     {
       //实例化三倍DES服务提供者类
       TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
       //随机生成密钥和IV向量
       TDES.GenerateIV();
       TDES.GenerateKey();
       //执行加密
       byte [] EncrypeByte = EncrypText(StrBox.Text, TDES.Key, TDES.IV);
       //显示密文和密钥
       KeyBox.Text = Encoding.ASCII.GetString(TDES.Key);
       IVBox.Text = Encoding.ASCII.GetString(TDES.IV);
       CrypeBox.Text = Encoding.UTF8.GetString(EncrypeByte);
       //执行解密
       Str2Box.Text = DecrypText(EncrypeByte, TDES.Key, TDES.IV);
     }
     #region 加密
     /// <summary>
     /// 执行三倍DES加密的方法
     /// </summary>
     /// <param name="Str">明文字符串</param>
     /// <param name="Key">密钥</param>
     /// <param name="IV">IV向量</param>
     /// <returns>密文的字节序列</returns>
     private byte [] EncrypText( string Str, byte [] Key, byte [] IV)
     {
       //创建一个内存流,用于存放密文
       MemoryStream MS = new MemoryStream();
       //创建一个三倍DES服务提供者对象
       TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
       //创建一个加密流,用于加密操作
       CryptoStream CS = new CryptoStream(MS,
         TDES.CreateEncryptor(Key, IV),
         CryptoStreamMode.Write);
       //定义输入,执行加密操作
       CS.Write(Encoding.UTF8.GetBytes(Str), 0, Str.Length);
       CS.FlushFinalBlock();
       //返回将密文的内存流转换为字节序列并返回
       return MS.ToArray();
     }
     #endregion
     #region 解密
     /// <summary>
     /// 执行三倍DES解密的方法
     /// </summary>
     /// <param name="CrypeText">密文的字节序列</param>
     /// <param name="Key">密钥</param>
     /// <param name="IV">IV向量</param>
     /// <returns>明文的字符串</returns>
     private string DecrypText( byte [] CrypeText, byte [] Key, byte [] IV)
     {
       //创建一个内存流,用于存放密文
       MemoryStream MS = new MemoryStream(CrypeText);
       //创建一个三倍DES服务提供者对象
       TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
       //创建解密流
       CryptoStream CS = new CryptoStream(MS,
         TDES.CreateDecryptor(Key, IV),
         CryptoStreamMode.Read);
       //创建一个用于存放明文的容器(字节序列)
       byte [] DecrypeBytes = new byte [CrypeText.Length];
       //执行解密
       CS.Read(DecrypeBytes, 0, CrypeText.Length);
       //返回解密后的明文字符串
       return Encoding.UTF8.GetString(DecrypeBytes);
     }
     #endregion
   }
}

运行效果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。 最早的定义了该算法的标准(ANS X9.52,1998年发布)将其描述为“三重数据加密算法(TDEA)”— 即为ANSI X3.92中定义的数据加密算法(DEA)的三次重复操作— 而完全没有使用术语“3DES”或“DES”。FIPS PUB 46-3(1999)定义了“三重数据加密算法”(TDEA),也使用了术语“Triple DES”和“DES”。该标准中互换的使用“数据加密算法”(DEA)和“DES”的概念,其中以此开始DES的定义: 数据加密标准(DES)应当包括下文中的数据加密算法(DES[4])与三重数据加密算法(TDEA,如ANSI X9.52中所描述的) NIST SP 800-67(2004,2008[5])主要使用术语TDEA,但也提到了“Triple DES(TDEA)”。ISO/IEC 18033-3(2005)使用“TDEA”,但其中提到: TDEA通称Triple DES(数据加密标准)。 没有一个定义了本算法的标准使用术语“3DES”。 3DESughhhg34465345556555678==算法== 3DES使用“密钥包”,其包含3个DES密钥,K1,K2和K3,均为56位(除去奇偶校验位)。加密算法为: 密文 = EK3(DK2(EK1(平文))) 也就是说,使用K1为密钥进行DES加密,再用K2为密钥进行DES“解密”,最后以K3进行DES加密。 而解密则为其反过程: 平文 = DK1(EK2(DK3(密文))) 即以K3解密,以K2“加密”,最后以K1解密。 每次加密操作都只处理64位数据,称为一块。 无论是加密还是解密,中间一步都是前后两步的逆。这种做法提高了使用密钥选项2时的算法强度,并在使用密钥选项3时与DES兼容。 密钥选项[编辑] 标准定义了三种密钥选项: 密钥选项1:三个密钥是独立的。 密钥选项2:K1和K2是独立的,而K3=K1 密钥选项3:三个密钥均相等,即K1=K2=K3 密钥选项1的强度最高,拥有3 x 56 = 168个独立的密钥位。 密钥选项2的安全性稍低,拥有2 x 56 = 112个独立的密钥位。该选项比简单的应用DES两次的强度较高,即使用K1和K2,因为它可以防御中途相遇攻击。 密钥选项3等同与DES,只有56个密钥位。这个选项提供了与DES的兼容性,因为第1和第2次DES操作相互抵消了。该选项不再为国家标准科技协会(NIST)所建议[6],亦不为ISO/IEC 18033-3所支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值