加密算法之单向散列算法

加密算法

背景:
现有的序列号加密算法大都是软件开发者自行设计的,大部分相当简单。有些算法,其作者虽 然下了很大的工夫,却往往达不到希望达到的效果。其实,有很多成熟的算法可以使用,特别是密 码学中一些强度比较高的算法,例如RSA 、BlowFish 、MD5等。对这些算法,网上有大量的源码或 编译好的库(当然这些库中可能会有一些漏洞),可以直接加以利用,我们要做的只是利用搜索引 擎找到它们并将它们嵌入自己的程序。应当指出,尽管这些算法的强度很高,但是使用方法也要得 当,否则效果就和普通的四则运算没有区别,很容易被解密者算出注册码或者写出注册机。

1.1 单向散列算法

单向散列函数算法也称 Hash(哈希)算法,是一种将任意长度的消息压缩到某一固定长度(消 息摘要)的函数(该过程不可逆)。Hash 函数可用于数字签名、消息的完整性检测、消息起源的认 证检测等。常见的散列算法有MD5 、SHA 、RIPE-MD 、HAVAL 、N-Hash等。
在软件的加密保护中, Hash 函数是经常用到的加密算法。但是,由于 Hash 函数为不可逆算 法,软件只能使用Hash 函数作为加密的一个中间步骤。例如,对用户名进行 Hash变换,再对这个 结果进行可逆的加密变换(例如对称密码),变换结果为注册码。从解密的角度来说, 一般不必了 解 Hash 函数的具体内容(变种算法除外),只要能识别出是何种 Hash 函数,就可以直接套用相关 算法的源码来实现。

1.1.1 MD5 算法

MD5 消息摘要算法(Mesage Digest Algorithm) 是由 R.Rivest 设计的。它对输入的任意长度的 消息进行运算,产生一个128位的消息摘要。近年来,随着穷举攻击和密码分析的发展,曾经应用 最为广泛的MD5算法已经不那么流行了。

1. 算法原理

(1)数据填充
填充消息使其长度与448模512同余(即长度=448 mod 512)。也就是说,填充后的消息长度 比512的倍数仅小64位。即使消息长度本身已经满足了上述长度要求也需要填充,填充方法是: 附一个1在消息后面,然后用0来填充,直到消息的长度与448模512同余。至少填充1位,至多 填充512位。
(2)添加长度
在上一步的结果之后附上64位的消

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值