DES算法怎么玩?原理看不懂,但是急着用怎么办?

看到这篇文章的读者,估计都会急着想知道如何使用DES算法的,
好吧,我们废话不多说,直接开门见山了。
关于加密算法的一些简单的理论知识,我直接附在下方了,可以自行查看。

具体代码详见我上传的资源:


https://download.csdn.net/download/skyksksksksks/87490417

接下来简要说明一下DES算法,DES算法简单来讲,
就是将数据切成64位的明文分组,再进行许多轮的函数循环迭代处理,
就可以得到一个我们需要的加密结果。
其中的算法原理不用深究,可以直接跳过,只要会用就行了。

接下来说正题,DES国密算法主要业务流程无非5个,1 ECB加密、2 ECB解密、3 CBC加密、4 CBC解密、4 MAC。


1ECB加密


输入,密钥(8、16、24字节)、密钥长度、输入数据(任意字节,单个数据大小为8字节)、输入数据长度
输出,输出数据(任意字节,单个数据大小为8字节,加密结果)、输出数据长度


2ECB解密


输入,密钥(8、16、24字节)、密钥长度、输入数据(任意字节,单个数据大小为8字节)、输入数据长度
输出,输出数据(任意字节,单个数据大小为8字节,解密结果)、输出数据长度


3CBC加密


输入,密钥(8、16、24字节)、密钥长度、初始数据(8字节)、输入数据(任意字节,单个数据大小为8字节)、输入数据长度
输出,输出数据(任意字节,单个数据大小为8字节,加密结果)、输出数据长度


4CBC解密


输入,密钥(8、16、24字节)、密钥长度、初始数据(8字节)、输入数据(任意字节,单个数据大小为8字节)、输入数据长度
输出,输出数据(任意字节,单个数据大小为8字节,解密结果)、输出数据长度


5MAC


输入,密钥(8、16、24字节)、密钥长度、初始数据(8字节)、输入数据(任意字节,单个数据大小为8字节)、输入数据长度
输出,输出数据(8字节,MAC结果)、输出数据长度

通过以上说明,基本上就可以使用DES算法了,
接下来再进一步聊聊这个DES算法,当然仅供了解。
特别是生成ECB加密、ECB解密、CBC加密、CBC解密、MAC,这5个业务流程的细节,
如果觉得太难,也可以直接跳过,只要会用就行了。


1ECB加密、ECB解密时:


按照DES加密、解密即可,


2CBC加密时:


第1块输入数据 异或 初始数据
->上1步骤异或结果 用指定密钥 进行DES加密
->第2块输入数据 异或 上1步骤加密结果
->上1步骤异或结果 用指定密钥 进行DES加密
......(重复上面2步骤直至结束)
->将所有步骤的加密结果拼接在一起,就是加密结果,即输出数据


3CBC解密时:


第1块输入数据 用指定密钥 进行DES解密
->上1步骤解密结果 异或 初始数据
->第2块输入数据 用指定密钥 进行DES解密
->上1步骤解密结果 异或 第1块输入数据
......(重复上面2步骤直至结束)
->将所有步骤的异或结果拼接在一起,就是解密结果,即输出数据


4MAC时:


第1块输入数据 异或 初始数据
->上1步骤异或结果 用指定密钥 进行DES加密
->第2块输入数据 异或 上1步骤加密结果
->上1步骤异或结果 用指定密钥 进行DES加密
......(重复上面2步骤直至结束)
->最后1步骤的加密结果,就是MAC结果,即输出数据
友情提示,上面的MAC业务流程只是某些场景中约定俗成的业务流程,
具体的MAC业务流程,还是需要按照具体情况而定。
此外,如果密钥长度为16字节,
对单个数据(8字节)进行加密处理时,
会采取先用密钥前8字节加密、再用密钥后8字节后解密、最后再用密钥前8字节加密的方式得到加密结果,
对单个数据(8字节)进行解密处理时,
会采取先用密钥前8字节解密、再用密钥后8字节后加密、最后再用密钥前8字节解密的方式得到解密结果,
对单个数据(8字节)进行MAC处理时,
前n-1次,会采取只用密钥前8字节加密,最后1次,和加密处理相同。
如果密钥长度为24字节,
对单个数据(8字节)进行加密处理时,
会采取先用密钥前8字节加密、再用密钥中间8字节后解密、最后再用密钥后8字节加密的方式得到加密结果,
对单个数据(8字节)进行解密处理时,
会采取先用密钥前8字节解密、再用密钥中间8字节后加密、最后再用密钥后8字节解密的方式得到解密结果,
对单个数据(8字节)进行MAC处理时,
前n-1次,会采取只用密钥前8字节加密,最后1次,和加密处理相同。
友情提示,同样的,上面的业务流程只是某些场景中约定俗成的业务流程,
具体的业务流程,还是需要按照具体情况而定。

这里我自己写了一个类,核心部分只用了C、C++语言,实现了以上功能。

类中函数声明见下方:

    /*
    @param
    pstcdData 数据
    lOperatorType 操作类型,1 ECB加密、2 ECB解密、3 CBC加密、4 CBC解密、5 MAC
    (无此参数)lKeyDataBits 密钥数据位数
    pucKeyData 密钥数据(大小为8、16、24字节)
    lKeyDataSize 密钥数据大小
    pucInitValueData 初始值数据(操作类型为1 ECB加密、2 ECB解密时,无此参数;操作类型为3 CBC加密、4 CBC解密、5 MAC时,如果无此参数的数据,可以给全0的数据,大小为8字节)
    (无此参数)lInitValueDataSize 初始值数据大小
    (无此参数)pucUserIDData 用户ID数据
    (无此参数)lUserIDDataSize 用户ID数据大小
    pucInputData 输入数据(单个数据大小为8字节)
    lInputDataSize 输入数据大小
    (无此参数)pcucSignData 签名数据
    (无此参数)lSignDataSize 签名数据大小
    pucOutputData 输出数据(操作类型为1 ECB加密、2 ECB解密、3 CBC加密、4 CBC解密时,单个数据大小为8字节;操作类型为5 MAC时,大小为8字节)
    lOutputDataSize 输出数据大小
    @return
    0 成功、<0 失败
    @note
    操作类型为5 MAC时,且运算类型为ANSI X9.9/X9.19、密钥为3倍长度密钥时,和网上的测试结果匹配,和工具上的测试结果(无有效结果,全0的数据)不匹配
    */
    long DES(STCalculateData *pstcdData);

具体代码详见我上传的资源:


https://download.csdn.net/download/skyksksksksks/87490417

附:


算法分类:

1可逆算法
加密过程中需要使用密钥,输入明文后由系统经过密钥和加密算法处理成密文,
这种加密后的数据是可以被解密的,将密钥和密文,经过解密算法处理,
就能解密。
包含对称算法、非对称算法两类。

1.1对称算法(常用于加解密数据、信息摘要)
SM4、DES

1.2非对称算法(常用于加解密数据)
SM2、RSA

2不可逆算法
其特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,
这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,
得到相同的加密密文并被系统重新识别后,才能真正解密。
(常用于信息摘要、数据校验)
SM3、CRC、MD、SHA

详细列举:

我国公钥密码(椭圆曲线)算法(即SM2)
加密
公钥数据大小为64字节
输入数据大小为任意字节
输出数据大小为任意字节
解密
私钥数据大小为32字节
输入数据大小为任意字节
输出数据大小为任意字节
签名
私钥数据大小为32字节
用户ID数据大小为任意字节
输入数据大小为任意字节
输出数据大小为64字节
验证
公钥数据大小为64字节
用户ID数据大小为任意字节
输入数据大小为任意字节
签名数据大小为64字节

我国密码散列函数标准(即SM3)
密钥数据大小为任意字节
输入数据大小为任意字节
输出数据大小为32字节

我国分组密码算法(即SM4)
密钥数据大小为16字节
输入数据单个数据大小为16字节
输出数据单个数据大小为16字节

RSA加密算法(RSA algorithm,即RSA)
加密
公钥数据大小为任意字节
输入数据大小为任意字节
输出数据大小为任意字节
解密
私钥数据大小为任意字节
输入数据大小为任意字节
输出数据大小为任意字节
签名
私钥数据大小为任意字节
输入数据大小为任意字节
输出数据大小为任意字节
验证
公钥数据大小为任意字节
输入数据大小为任意字节
签名数据大小为任意字节

循环冗余校验(Cyclic Redundancy Check,即CRC)
输入数据大小为任意字节
输出数据大小为1、2、4字节

信息摘要算法(Message-Digest Algorithm,即MD)
输入数据大小为任意字节
输出数据大小为16字节

安全散列算法(Secure Hash Algorithm,即SHA)
输入数据大小为任意字节
输出数据大小为20、28、32、48、64字节

数据加密标准(Data Encryption Standard,即DES)
密钥数据大小为8、16、24字节
输入数据单个数据大小为8字节
输出数据单个数据大小为8字节

电码本(Electronic Codebook,即ECB):
是分组密码的一种最基本的工作模式;
在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。

密码分组链接模式(Cipher-block chaining,即CBC):
在CBC模式中,每个明文块先与前一个密文块进行异或后,再进行加密;
在这种方法中,每个密文块都依赖于它前面的所有明文块;
同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。

消息认证码(Message Authentication Code,即MAC):
带密钥的Hash函数;
通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skyksksksksks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值