原文:http://www.jiamisoft.com/blog/3471-ruanjianjiamifangfa.html

软件行业的加密是软件厂商为了保护软件开发的利润而采取的一种软件保护方式。当前,软件加密方法多种多样,从实现形式上经历了两个阶段:不依赖硬件的加密(软加密)方案和依赖特定硬件的加密(硬加密)方案。

一、不依赖硬件的加密方法

不依赖硬件的加密方法是一种低成本的加密方式。它的特点是不需要有辅助的硬件存在,直接在软件中设立密码。相关的方法有序列号法、密码表加密法、许可证法。

1、序列号法加密法

序列号法是用户在购买正版软件的时候供应商提供给他们正确的密码,从而使他们顺利安装和使用购买的软件的方法。但是,由于电脑软件的易复制性,盗版软件只需复制软件及安装序列号,一样能够完成安装并顺利运行,在软件功能上没有任何缺损。于是,这种类型的“钥匙”其实成了一种象征性的摆设,没有什么加密强度可言。

2、密码表加密法

密码表加密法是程序在运行时提出一些提示问题,用户需要按提示问题回答,如果回答错误则程序停止运行。正常情况下,只有输入正确的密码,软件才认为是合法使用者。这种加密方法运行简单,使用广泛。但是,因为密码表的特征字串很容易被复制,盗版者可以把整个密码表输入到计算机中存成一个文件,同软件的盗版一同公布出来,所以很容易被盗版者利用。

3、许可证加密法

从某种角度上说,这种方式是序列号加密的一个变种。用户从网上下载的或购买的软件并不能直接使用,软件在安装时或运行时会对计算机进行一番检测,并根据检测结果生成一个计算机的特定指纹,这个指纹可以是一个小文件,也可以是一串谁也看不懂的数,需要把这个指纹数据通过Internet、E-mail、电话、传真等方式发送到开发商那里,开发商再根据这个指纹给用户一个注册码或注册文件,用户得到这个注册码或注册文件后,按软件要求的步骤在计算机上完成注册后方能使用。

这个方法的买卖也是完全通过网络来进行的,而且用户购买的软件被限制了,只能在自己的计算机上运行,换到其他的计算机上,这个注册码或注册文件可能不再有效。同时用户更换某些硬件设备也可能造成注册码的失效,而且用户得到软件后在完成注册工作前会有一段时间无法使用。对于软件开发商来说服务与管理的工作量无疑也是非常巨大的。将来PIII处理器内部有了特定的序列号,将会减少这种加密方法的硬件依赖性,但估计普及起来还有很长的一段时间。

二、依赖特定硬件的加密

硬加密的原理是将加密信息固化在某个硬件电路中,然后将它作为一个软件的附加设备销售给用户。当运行该软件的时候,将该固化的电路设备接到计算机的输出端口,软件根据是否检测到对应的“密钥”来决定是否运行该软件或者屏蔽某些功能。在这一类加密保护中有软盘加密、加密卡、软件锁等。

1、软盘加密

钥匙盘的方式是最常见的软盘加密方式。所谓钥匙盘方式就是通过BIOS的INT13中断对软盘格式化一些特殊的磁道,有的还在特殊磁道里写入一定信息,软件在运行时要校验这些信息。这种软盘就好象一把“钥匙”一样,所以被人习惯称为钥匙盘。如KV3000等杀毒盘和早期的计算机等级考试安装盘就采用了这种加密方式。它们的主要特点是在软磁盘的特殊位置做标记,在软件运行中计算机要读取这些特殊标记,以验证软件的合法性。由于记录这种特殊标记的位置不能被平常的拷贝命令或拷贝软件所读取,所以,钥匙盘类的软件不能被轻易复制,这样,加在软件中的“锁”就变得比较安全有效了。

2、加密狗

加密狗是插在计算机并行口上的软硬件结合的软件加密产品。加密狗一般都有几十或几百字节的非易失性存储空间可供读写,有的内部还增添了一个单片机。软件运行时通过向并行口写入一定数据,判断从并行口返回密码数据正确与否来检查加密狗是否存在。加密狗包括加密代码程序和“密钥”(亦称加密盒)两部分。加密代码程序检查“密钥”是否存在,是否正确,在无误的情况下,去执行正常功能的应用程序。“密钥”中存放了“密码”,用硬件电路实现加密。

3、采用BIOS序列号

随着技术的高速发展,获取CPU信息和硬盘信息的加密方式越来越不适用。在计算机的升级之中,主板是面临淘汰的可能性最小的硬件,因此,主板序列号将作为主板有唯一的标志,被运用到软件的加密中。主板序列号其实就是BIOS序列号,因为每台计算机的主板都有唯一的标志———BIOS序列号,所以完全可以将这个序列号作为软件的认证信息。

三、各种加密方法的比较

1、依赖硬件的加密与不依赖硬件的加密的比较

依赖特定硬件的加密软件不容易被复制,因此,依赖特定硬件的加密比不依赖特定硬件的加密可靠。

2、“硬件指纹”与“软件指纹”的比较

“软件指纹”是指在传统的磁盘加密方法中,以软件的方式在磁盘的磁道上产生特殊的格式作为指纹,因此,“软件指纹”的产生受到磁盘机的转速、兼容性等不稳定因素的影响较大。另外,磁盘是一种容易损坏的介质,必须细心地保存指纹盘。“硬件指纹”是指指纹以硬件的形式存在,具有很高的可靠性。

3、加密狗与磁盘的比较

采用加密狗加密软件,由于指纹和软件是分离的,可以对软件进行备份,以防止原盘损坏。而磁盘加密方法把指纹放在磁盘上,不能备份,如果原盘损坏,软件就不能继续使用。

采用加密狗加密时,软件以不加密的形式存放,可以大批地快速复制,而采用磁盘加密方法,必须在每张盘上逐个制作指纹,而且指纹盘的质量难以保证,所以,加密狗加密法比磁盘加密法可靠。

无论是不依赖硬件的加密法还是依赖硬件的加密法,都是为了防止软件盗版而采取的一种主动的自我保护行为。加密技术的发展,也集中体现了计算机软硬件技术的前沿水平。发展加密技术,不仅仅是保护软件不被盗版,更重要的是培育一个劳而有获的健康的软件市场。

小知识之软件加密

软件加密就是用户在发送信息前,先调用信息安全模块对信息进行加密,然后发送,到达接收方后,由用户使用相应的解密软件进行解密并还原。采用软件加密方式有以下优点:已经存在标准的安全API(Application Programming Interface,应用程序编程接口)产品、实现方便、兼容性好。

【miscellaneous】软件加密方法的更多相关文章

  1. 利用U盘进行软件加密的方法

    利用U盘进行软件加密的方法 一般的U盘不具备加密的功能,虽然U盘和加密狗外形有一些相似,但是内部完全不一样的,U盘只是一个存储器芯片和简单的附属电路,而现在的智能卡加密狗都具有一个单独的CPU或者加密 ...

  2. 【miscellaneous】如何利用硬盘号和CPU序列号为软件加密

    原文:http://www.jiamisoft.com/blog/index.php/3469-yingpanhaocpuruanjianjiami.html 计算机软件是一种特殊的产品,为了防止软件 ...

  3. Java中常用的加密方法(JDK)

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  4. [转载] Java中常用的加密方法

    转载自http://www.iteye.com/topic/1122076/ 加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的 ...

  5. iOS常见的几种加密方法(base64.MD5.Token传值.系统指纹验证。。加密)

    普通加密方法是讲密码进行加密后保存到用户偏好设置中 钥匙串是以明文形式保存,但是不知道存放的具体位置 一. base64加密 base64 编码是现代密码学的基础 基本原理: 原本是 8个bit 一组 ...

  6. C# Note30: 软件加密机制以及如何防止反编译

    参考文章: C#软件license管理(简单软件注册机制) 软件加密技术和注册机制 .NET中的许可证机制--License 背景 .net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间 ...

  7. 软件加密工具-Virbox 开发者工具盒

    功能 Virbox 开发者工具盒是由深思数盾研发的一套软件加密工具,将加壳工具.API文档及操作流程文档等集成在一起,方便软件开发者使用. 您可以通过 Virbox 开发者工具盒实现: dll.exe ...

  8. iOS 几种加密方法

    iOS常见的几种加密方法 普通加密方法是讲密码进行加密后保存到用户偏好设置中 钥匙串是以明文形式保存,但是不知道存放的具体位置 1.base64加密 base64 编码是现代密码学的基础 基本原理: ...

  9. ASP.NET中几种加密方法

    下面就是ASP.NET中几种加密方法.加密算法有两种,也就是上面提到的MD5和SHA1,这里我举的例子是以MD5为例,SHA1大致相同,只是使用的类不一样. MD5的全称是Message-Digest ...

随机推荐

  1. BZOJ3122 随机数生成器——BSGS

    题意 链接 给定 $p,\ a,\ b, \ x_1$,现有一数列 $$x_{i+1} \equiv (ax_i + b) \ mod \ p$$ 求最小的 $i$ 满足 $x_i = t$ 分析 代 ...

  2. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1) 963B 964D B Destruction of a Tree

    题 OvO http://codeforces.com/contest/963/problem/B CF 963B 964D 解 对于题目要求,显然一开始的树,要求度数为偶数的节点个数为奇数个,通过奇 ...

  3. 使用谷歌chrome浏览器查看任何标签的固有属性

    查看任何标签的固有属性property: 使用谷歌浏览器:Ctrl+Shift+I 开发者工具----点击Elements----点击a标签----点击Properties属性及其属性值. 自定义属性 ...

  4. 富文本编辑器直接从 word 中复制粘贴公式

    在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...

  5. 快速幂 x

    快速幂! 模板如下: #include<iostream> #include<cmath> #include<cstdio> #define LL long lon ...

  6. 【做题记录】Codeforces做题记录

    最近决定写一些CF Div.1的题,练习一下速度和代码能力. 暂定从中考后的Codeforces Round #572开始. 大部分比较简单的题直接把题解写在这里,不单独开文章了. Codeforce ...

  7. MySQL基础之二:主从复制

    # mysql主从复制逻辑: 1.从库执行start slave 开启主从复制. 2.从库请求连接到主库,并且指定binlog文件以及位置后发出请求. 3.主库收到从库请求后,将信息返回给从库,除了信 ...

  8. 单词拼接(dfs/回溯/递归)

    单词拼接传送门 //单词拼接 #include<stdio.h> #include<string.h> #include<algorithm> using name ...

  9. Linux:sed

    [参考文章]:shell中sed命令的用法 [参考文章]:SED 简明教程 1. 简述 sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用. 执行命令时,一次处理一行内容 ...

  10. 阿里前端实习生面试总结(两轮技术面+一轮hr面)

    投的蚂蚁金服: 一面(只有13分钟): 1.angular里双向绑定的实现原理: 巴拉巴拉巴拉,这个问题很常见,我提到了$scope.$apply()和$scope.$digest(),面试官问app ...