c语言3des算法,3DES算法加解密介绍

3DES:

3DES加密就是DES的加强版,三重加密。将192位密钥分成三段,每段64位,除去8位奇偶校验,剩下56位用来加密。

数据补位:

加密时,将数据按照8个字节一段进行加密,这就出现最后一段不足8个字节的问题,所以会补足8位。

补位有多种方式:

java中常用的PKCS5Padding与.net 常用PKCS7都是将将需要填充的长度作为值

例子 数据长度为9,所以需要拆成两个8,缺少7位

数据     AA AA AA AA AA AA AA AA    AA

填充后 : AA AA AA AA AA AA AA AA    AA  07 07 07 07 07 07 07 07

一般.net PKCS7=java PKCS5Padding

还有补0的,zero padding和很多。

加密模式:

ECB:java默认的加密模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。

CBC:.net默认的加密模式,新增一个初始化向量iv,使得加密结果更加安全。

加密步骤如下:

1)首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,用指定的PADDING数据补位)

2)第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1(初始化向量I为全零)

3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

4)之后的数据以此类推,得到Cn

5)按顺序连为C1C2C3......Cn即为加密结果。

异或(同为0 异为1  1100+1011=0111)

还有CFB和OFB

互联网程序中加密模式的使用:

ECB是不推荐的方式,Key相同时,相同的明文在不同的时候产生相同的明文,容易遭到字典攻击;

CBC由于加入了向量参数,一定程度上抵御了字典工具,但缺点也随之而来,一旦中间一个数据出错或丢失,后面的数据将受到影响;

CFB与CBC类似,好处是明文和密文不用是8bit的整数倍,中间一个数据出错,只影响后面的几个块的数据;

OFB比CFB方式,一旦一个数据出错,不会影响后面的数据,但安全性降低;

因此,推荐使用CFB方式,但每个数据包单独加密,否则一个数据包丢失,需要做很多容错处理;

当然,具体问题也要具体分析,对于只需要”特定安全性”①,不需要”计算安全性”以上的软件,也可以使用ECB模式;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值