原文: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. iar8.32版本关于cmsis的说明

    平台是cubemx5.3 keil5.26 带freertos,使用iar8.32,在上图中的use cmsis 打勾与否都能编译通过.

  2. pyinstaller打包程序包含openpyxl库问题解决

    带有openpyxl库时,直接打包,总会失败: 原因:看本地文件...Anaconda3\Lib\site-packages\PyInstaller\hooks\hook-openpyxl.py 发现 ...

  3. Gym - 101955K Let the Flames Begin 约瑟夫环

    Gym - 101955KLet the Flames Begin  说实话,没怎么搞懂,直接挂两博客. 小飞_Xiaofei的约瑟夫问题(Josephus Problem)3:谁最后一个出列 小飞_ ...

  4. 安装更新npm和nodejs

    1.安装npm sudo apt-get install npm 2.升级npm sudo npm install npm@latest -g 3.安装用于安装nodejs的模块n sudo npm ...

  5. 以下是Direct 3d的安装步骤

    安装配置 真的是软肋 o( ̄ε ̄*)   我记录以下 步骤 防止下次忘记了 首先要安装到direct3d 之后在vs上配置  如下: 找到 安装direct3d的文件夹 复制路径(如下 我的路径为 G ...

  6. 1-4CMYK色彩模式

    http://www.missyuan.com/thread-350717-1-1.html CMYK也称作印刷色彩模式,顾名思义就是用来印刷的. 只要是在印刷品上看到的图像,就是CMYK模式表现的 ...

  7. MySQL数据分析-(14)表补充:字符集

    大家好,我是jacky朱元禄,很高兴继续跟大家学习<MySQL数据分析实战>,本节课程jacky分享的主题是表补充之字符集 在分享课程之前,jacky在跟大家强调一下逻辑的重要性,我们学习 ...

  8. BZOJ 4734 UOJ #269 如何优雅地求和 (多项式)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4734 (UOJ) http://uoj.ac/problem/269 题解 ...

  9. 使用sequelize-auto 生成mysql 表的实体时主键没有 autoIncrement: true 属性

    使用sequelize-auto 生成mysql 表时主键没有 autoIncrement: true 属性,这会导致插入数据时报错.看git上面是已经解决了的,解决方法是修改查询语句模板.我用的是0 ...

  10. git常用操作方法

    在实际开发,测试中,会使用git作为版本控制工具来完成团队协作.因此,对基本的git操作指令进行总结是十分有必要的,本文对一些术语或者理论基础,不重新码字,可以参考廖雪峰老师的博文,本文只对命令做归纳 ...