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

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

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


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

接下来简要说明一下MD算法,MD算法简单来讲,
就是通过先初始化4个128位的缓存,然后用4个非线性函数对数据进行处理,
最后得到一个由4个128位的数据拼接成的我们需要的加密结果。
其中的算法原理不用深究,可以直接跳过,只要会用就行了。

接下来说正题,MD算法主要业务流程无非1个,加密。


加密


输入,输入数据(任意字节)、输入数据长度
输出,输出数据(16字节,加密结果)、输出数据长度

通过以上说明,基本上就可以使用MD算法了,
接下来再进一步聊一聊这个MD算法,当然仅供了解。


其实简单点,MD算法就是不可逆算法,和SM3、SHA等是类似的玩法,
无非就是指定数据得到一个我们需要的校验结果,把它交给另一方,
另一方收到数据后,也算出校验码,然后比对校验码,判断数据是否完整正确。
MD算法早期有MD2、MD4等,现在只剩下MD5还有一席之地了,
毕竟后起之秀SHA算法已经开始虎视眈眈,MD算法被其完全取代可能只是时间早晚问题了。

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

类中函数声明见下方:

    /*
    @param
    pcucInputData 输入数据(大小为任意字节)
    lInputDataSize 输入数据大小
    pucOutputData 输出数据(大小为16字节)
    lOutputDataSize 输出数据大小
    lOperatorType 操作类型,1 MD2、2 MD4、3 MD5
    @return
    0 成功、<0 失败
    */
    long MD(const UCHAR *pcucInputData, long lInputDataSize,
        UCHAR *pucOutputData, long &lOutputDataSize,
        long lOperatorType);

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


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函数;
通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

skyksksksksks

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

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

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

打赏作者

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

抵扣说明:

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

余额充值