信息安全工程实践

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

信息安全工程实践安全编程基于USBKey的软件授权编程实验【实验内容】了解USBKey的使用和工作原理掌握通过USBKey控制软件启动和加密的简单程序【实验原理】USBKey是一种插在计算机USB口上的软硬件结合的设备,USBKey内置单片机或智能卡芯片,具有一定的存储空间和运算处理能力,使得USBKey具有判断、分析的处理能力,增强了主动的反解密能力。USBKey的内置芯片里包含有专用的加密算法软件,USBKey厂家提供一套USBKey的读写接口(API)给开发商,开发商在开发中通过在软件执行过程中和USBKey交换数据来实现加解密。目前多在USBKey中存储用户的私钥以及数字证书,利用USBKey内置的公钥算法实现对用户身份的认证,同时也可以通过USBKey防止未授权的用户对软件进行复制和破解。【实验环境】运行环境:MicrosoftVisualStudio2005编程语言:C#【实验步骤】一、加密狗本实验使用的加密狗,是一种类似于U盘的小硬件,是一种防盗版的方式。加密狗就是一种插在计算机并行口上的软硬件结合的加密产品,为多数软件开发商所采用。加密狗一般都有几十或几百字节的非易失性存储空间可供读写,现在较新的加密狗内部还包含了单片机。软件开发者可以通过接口函数和加密狗进行数据交换(即对加密狗进行读写),来检查加密狗是否插在并行口上;或者直接用加密狗附带的工具加密自己EXE文件(俗称包壳)。这样,软件开发者可以在软件中设置多处软件锁,利用加密狗做为钥匙来打开这些锁;如果没插加密狗或加密狗不对应,软件将不能正常执行。加密狗厂家都会提供一套加密狗的读写接口(API)给开发商,厂家卖给开发商的狗都有各自的区别,某个开发商只能操作自己买的加密狗。加密狗通过在软件执行过程中和加密狗交换数据来实现加密的,加密狗内置单片机电路(也称CPU),使得加密狗具有判断、分析的处理能力,增强了主动的反解密能力。这种加密产品称它为“智能型”加密狗。加密狗内置的单片机里包含有专用于加密的算法软件,该软件被写入单片机后,就不能再被读出。这样,就保证了加密狗硬件不能被复制。二、加密狗使用的简单实例此实例通过加密狗来控制软件的启动。(1)运行页面如图5.1.1-1所示为主程序窗口的运行画面,要运行程序,必须先成功启动加密狗。图5.1.1-1(2)主要代码:注:把加密狗所提供的DLL文件(本实验为Rockey2.dll)加载到程序的\Bin\Debug\目录下。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Runtime.InteropServices;namespaceDogTest{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}#region引用加密狗所提供的接口[DllImport(Rockey2.dll)]staticexternintRY2_Find();[DllImport(Rockey2.dll)]staticexternintRY2_Open(intmode,Int32uid,refInt32hid);[DllImport(Rockey2.dll)]staticexternvoidRY2_Close(inthandle);[DllImport(Rockey2.dll)]staticexternintRY2_GenUID(inthandle,refInt32uid,Stringseed,intisProtect);[DllImport(Rockey2.dll)]staticexternintRY2_Read(inthandle,intblock_index,StringBuilderbuffer512);[DllImport(Rockey2.dll)]staticexternintRY2_Write(inthandle,intblock_index,Stringbuffer512);#endregion//启动按钮的事件代码privatevoidBtn_start_Click(objectsender,EventArgse){Stringstrinfo;intret=0;Int32handle=0;Int32hid=0;Int32uid=0;Stringseed,Writebuff;CharcRead='0';stringReadBuff=newstring(cRead,512);//查找ret=RY2_Find();if(ret=0){listBox1.Items.Add(NotFindRockey2!);return;}listBox1.Items.Add(FindRockey21!);//打开ret=RY2_Open(0,0,refhid);if(ret!=0){strinfo=Err:+handle;listBox1.Items.Add(strinfo);return;}handle=ret;strinfo=Rockey2:+hid;listBox1.Items.Add(strinfo);//取得UIDseed=Rockey2;ret=RY2_GenUID(handle,refuid,seed,0);strinfo=GenUid:+uid;listBox1.Items.Add(strinfo);//关闭RY2_Close(handle);strinfo=CloseRockey2!;listBox1.Items.Add(strinfo);//查找,发现ret=RY2_Find();//打开ret=RY2_Open(1,uid,refhid);handle=ret;//写入数据Writebuff=WelcometousedRockey2!;ret=RY2_Write(handle,0,Writebuff);strinfo=WriteData:+WelcometousedRockey2!;listBox1.Items.Add(strinfo);//读取数据StringBuilderretbuff=newStringBuilder(0,512);ret=RY2_Read(handle,0,retbuff);strinfo=ReadData:+retbuff.ToString();listBox1.Items.Add(strinfo);DialogResultdr=MessageBox.Show(加密狗已经成功启动!,xiaoxi,MessageBoxButtons.OK);if(dr==DialogResult.OK){WorkMainwork=newWorkMain();work.Show();}}privatevoidBtn_clear_Click(objectsender,EventArgse)//清空按钮的事件代码{listBox1.Items.Clear();}(3)运行此实例的界面如果没有正确加载加密狗,程序会告诉我们没有发现加密狗,如图5.1.1-2所示。图5.1.1-2如果正确加载加密狗,程序会有相应提示,如图5.1.1-3所示。图5.1.1-3点击“确定”按钮后,进入工作页面,如图5.1.1-4所示。图5.1.1-4【实验思考】根据自己的硬件不同,试编写程序通过加密狗来控制此程序的运行;通过加密狗来控制所编程序的使用人数。利用BouncyCastleAPI加密编程实验【实验内容】使用BouncyCastleAPI接口进行编程【实验原理】BouncyCastle是一种用于Java平台的开放源码的轻量级密码包。它支持大量的密码算法,并提供JCE1.2.1的实现。因为BouncyCastle被设计成轻量级的,所以从J2SE1.4到J2ME(包括MIDP)平台,它都可以运行,是在MIDP上运行的唯一完整的密码包。后来也提供C#版本的API。BouncyCastleAPI功能很强大,对于初学者来说,辨认类之间的关系以及方法参数和返回值的正确类型有一定难度。通常,开发人员必须浏览源代码和测试用例来研究BouncyCastleAPI的主要功能。可以从。【实验环境】运行环境:MicrosoftVisualStudio2005编程语言:C#【实验步骤】一、利用BouncyCastleAPI编码实现对数据的加解密将其DLL类库,添加到自己的项目中,示例的源代码展示如下:(1)本例的主页面如图5.1.2-1所示。图5.1.2-1(2)其页面的主要代码为:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO;namespaceBouncyCastleAPI{publicpartialclassTestCrypto:Form{string[]strEn={,};string[]strDe={,,};publicTestCrypto(){InitializeComponent();}privatevoidBtn_Source_Click(objectsender,EventArgse){OpenFileDialogfiledlg=newOpenFileDialog();filedlg.Filter=文本文件(*.txt)|*.txt;if(filedlg.ShowDialog()==DialogResult.OK){txt_Source.Text=filedlg.FileName;}}privatevoidBtn_target_Click(objectsender,EventArgse){OpenFileDialogfiledlg=newOpenFileDialog();filedlg.Filter=文本文件(*.txt)|*.txt;if(filedlg.ShowDialog()==DialogResult.OK){txt_target.Text=filedlg.FileName;}}//加密privatevoidBtn_Encrypt_Click(objectsender,EventArgse){if(txt_Source.Text==||txt_Source.Text==string.Empty){MessageBox.Show(请选择文件!);return;}if(txt_target.Text==||txt_target.Text==string.Empty){MessageBox.Show(请选择文件!);return;}else{strEn[0]=txt_Source.Text;strEn[1]=txt_target.Text;DESEncrypto.Inin(strEn);//调用DESEncrypto类}}//解密privatevoidBtn_Decrypt_Click(objectsender,EventArgse){if(txt_Source.Text==||txt_Source.Text==string.Empty){MessageBox.Show(请选择文件!);return;}if(txt_target.Text==||txt_target.Text==string.Empty){MessageBox.Show(请选择文件!);return;}else{strD

1 / 102
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功