对称加密算法在C#中的踩坑日常

本文介绍了作者在C#中使用3DES加密算法时遇到的问题,包括C#中对密钥的特殊处理,以及在NetCore环境下与.NET Framework的不同之处。文中详细解释了3DES的基本逻辑、加密选项,并提供了C#实现的注意事项,特别是在NetCore下如何处理16位密钥以兼容旧代码。

前言

有幸接触了一下传说中的对称加密算法3DES

感觉这些加密算法与我的工作是想去甚远的,一般没什么机会接触这些东西

今次了解了一下3DES这个对称算法

原理算不上明白,算是踩了C#中的一些坑吧

C#中对于密钥的处理比较奇怪,花费了一晚上一早上的时间才弄明白

期间偷窥了不少C#的源代码

下面由我娓娓道来

简介

3DES算法命名

定义算法最早期的标准被放在ANS X9.52中并在1998年发布并将其描述为三重数据加密算法(简称TDEA),在ANSI X3.92中定义了该算法的三个操作但是并没有使用DES或者3DES,直到1999年发布的FIPS PUB 46-3在正式命名三重数据加密算法,大概在2004到2005的样子才正式引入三重数据加密算法,之前一直以TDEA存在着,也就是说TDEA就是3DES,但是没有使用3DES作为标准术语。

基本逻辑

三重数据加密算法使用包括密钥K1,密钥K2和密钥约束K3,每一个包含56位不包含奇偶校验,算法实现公式如下:

ciphertext = EK3(DK2(EK1(plaintext)))

密文 = EK3(DK2(EK1(平文)))

用K1对数据进行加密,用K2对数据进行解密,用K3对数据再加密。

解密公式为如下:

plaintext = DK1(EK2(DK3(ciphertext)))

平文 = DK1(EK2(DK3(密文)))

用K3j对数据进行解密,用K2对数据进行加密,用K1对数据进行加密。每次加密都处理64位数据并形成一块。

3DES加密选项

定义了三种密钥选项。

(1)三个密钥相互独立。

(2)K1和K2密钥独立,但K1 = K3。

(3)三个密钥相等。

密钥选项1的强度最高,拥有3 x 56 = 168个独立的密钥位。

密钥选项2的安全性稍低,拥有2 x 56 = 112个独立的密钥位。该选项比简单的应用DES两次的强度较高,即使用K1和K2,因为它可以防御中途相遇攻击。

密钥选项3等同与DES,只有56个密钥位。这个选项提供了与DES的兼容性,因为第1和第2次DES操作相互抵消了。该选项不再为国家标准科技协会(NIST)所推荐,亦不为ISO/IEC 18033-3所支持。

C#实现

讲真简介里用来凑字数的这些内容我其实没怎么看明白

C#中使用 TripleDESCryptoServiceProvider 类来实现相关功能

public static string DesEncry
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值