Visual C++中调用DLL实现数据加密
发布时间:2008/8/23 0:00:00 访问次数:858
摘 要:介绍了动态链接库这种模块复用方法及在vc中对它的调用,并给出了一个通过复用来实现数据加密的具体实例。
引言
模块化思想贯穿于软件工程各个发展阶段,模块复用是构建大系统的一种重要思想。模块复用方法有:函数、函数库、动态链接库、com。其都是基于模块化的基本思想。函数是最简单的模块化思想,也是后面方法的基础,甚至是一个应用程序的基础。函数库是函数的组合,一般将一些功能相似的函数放在一起作为函数库,这种函数库通常叫做静态库,其链接方式是静态的。com即组件对象模型,是一种集成技术,可以使程序在运行时把各种不相关的软件程序混合在一起,而不必考虑这些不相关的程序是用什么语言编写的,它也是一种标准或者称为协议,负责将一个软件模块和另一个软件连接起来。动态链接库dll(dynamic link library)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源,其链接方式是动态的。动态链接库文件的扩展名一般是dll,也有可能是fon、sys和dry,它和可执行文件(.exe)非常相似,区别在于dll中虽然包含了可执行代码却不能单独执行,而应由windows应用程序直接或间接调用。windows操作系统包含大量动态链接库,其中最主要的是kernel32.dll、user32.dll、gdi32.dll 。
dll的调用
调用dll,首先需要将dll文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同。windows提供了两种将dll映像到进程地址空间的方法:
1、隐式的加载时链接
这种方法需要dll工程经编译产生的lib文件,此文件中包含了dll允许应用程序调用的所有函数的列表,当链接器发现应用程序调用了lib文件列出的某个函数,就会在应用程序的可执行文件的文件映像中加入一些信息,这些信息指出了包含这个函数的dll文件的名字。当这个应用程序运行时,也就是它的可执行文件被操作系统产生映像文件时,系统会查看这个映像文件中关于dll的信息,然后将这个dll文件映像到进程的地址空间。
系统通过dll文件的名称,试图加载这个文件到进程地址空间时,它寻找dll 文件的路径按照先后顺序如下:
·程序运行时的目录,即可执行文件所在的目录;
·当前程序工作目录
·系统目录:对于windows95/98来说,可以调用getsystemdirectory函数来得到,对于windowsnt/2000来说,指的是32位windows的系统目录,也可以调用getsystemdirectory函数来得到,得到的值为system32。
·windows目录
·列在path环境变量中的所有目录
vc中加载dll的lib文件的方法有以下三种:
①lib文件直接加入到工程文件列表中
在vc中打开file view一页,选中工程名,单击鼠标右键,然后选中"add files to project"菜单,在弹出的文件对话框中选中要加入dll的lib文件即可。
②设置工程的 project settings来加载dll的lib文件
打开工程的 project settings菜单,选中link,然后在object/library modules下的文本框中输入dll的lib文件。
③通过程序代码的方式
加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的lib文件。因为,在debug方式下,产生的lib文件是debug版本,如regd.lib;在release方式下,产生的lib文件是release版本,如regr.lib。
当应用程序对dll的lib文件加载后,还需要把dll对应的头文件(*.h)包含到其中,在这个头文件中给出了dll中定义的函数原型,然后声明。
2、显式的运行时链接
隐式链接虽然实现较简单,但除了必须的*.dll文件外还需要dll的*.h文件和*.lib文件,在那些只提供*.dll文件的场合就无法使用,而只能采用显式链接的方式。这种方式通过调用api函数来完成对dll的加载与卸载,其能更加有效地使用内存,在编写大型应用程序时往往采用此方式。这种方法编程具体实现步骤如下:
①使用windows api函数load library或者mfc提供的afxloadlibrary将dll模块映像到进程的内存空间,对dll模块进行动态加载。
②使用getprocaddress函数得到要调用dll中的函数的指针。
③不用dll时,用free library函数或者afxfreelibrary函数从进程的地址空间显式卸载dll。
vc中调用实例
数据加密是计算机安全领域的重要内容,其基本思想是通过变换信息的表现形式来保护敏感信息,使非授权者不能了解被保护信息的内容。常见的数据加密算法有:des,idea,rsa,ecc,aes,md5,sha等。
《共享软件加密算法库》是一款针对个人、企业开发共享软件的加密工具,支持windows平台下各类开发工具:vc、vb、delphi、pb、vfp等,算法库集成的算法有:blowfish、md5、secret16、aes、sha、crc32、rsa、des、字符串加/解密、
引言
模块化思想贯穿于软件工程各个发展阶段,模块复用是构建大系统的一种重要思想。模块复用方法有:函数、函数库、动态链接库、com。其都是基于模块化的基本思想。函数是最简单的模块化思想,也是后面方法的基础,甚至是一个应用程序的基础。函数库是函数的组合,一般将一些功能相似的函数放在一起作为函数库,这种函数库通常叫做静态库,其链接方式是静态的。com即组件对象模型,是一种集成技术,可以使程序在运行时把各种不相关的软件程序混合在一起,而不必考虑这些不相关的程序是用什么语言编写的,它也是一种标准或者称为协议,负责将一个软件模块和另一个软件连接起来。动态链接库dll(dynamic link library)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源,其链接方式是动态的。动态链接库文件的扩展名一般是dll,也有可能是fon、sys和dry,它和可执行文件(.exe)非常相似,区别在于dll中虽然包含了可执行代码却不能单独执行,而应由windows应用程序直接或间接调用。windows操作系统包含大量动态链接库,其中最主要的是kernel32.dll、user32.dll、gdi32.dll 。
dll的调用
调用dll,首先需要将dll文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同。windows提供了两种将dll映像到进程地址空间的方法:
1、隐式的加载时链接
这种方法需要dll工程经编译产生的lib文件,此文件中包含了dll允许应用程序调用的所有函数的列表,当链接器发现应用程序调用了lib文件列出的某个函数,就会在应用程序的可执行文件的文件映像中加入一些信息,这些信息指出了包含这个函数的dll文件的名字。当这个应用程序运行时,也就是它的可执行文件被操作系统产生映像文件时,系统会查看这个映像文件中关于dll的信息,然后将这个dll文件映像到进程的地址空间。
系统通过dll文件的名称,试图加载这个文件到进程地址空间时,它寻找dll 文件的路径按照先后顺序如下:
·程序运行时的目录,即可执行文件所在的目录;
·当前程序工作目录
·系统目录:对于windows95/98来说,可以调用getsystemdirectory函数来得到,对于windowsnt/2000来说,指的是32位windows的系统目录,也可以调用getsystemdirectory函数来得到,得到的值为system32。
·windows目录
·列在path环境变量中的所有目录
vc中加载dll的lib文件的方法有以下三种:
①lib文件直接加入到工程文件列表中
在vc中打开file view一页,选中工程名,单击鼠标右键,然后选中"add files to project"菜单,在弹出的文件对话框中选中要加入dll的lib文件即可。
②设置工程的 project settings来加载dll的lib文件
打开工程的 project settings菜单,选中link,然后在object/library modules下的文本框中输入dll的lib文件。
③通过程序代码的方式
加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的lib文件。因为,在debug方式下,产生的lib文件是debug版本,如regd.lib;在release方式下,产生的lib文件是release版本,如regr.lib。
当应用程序对dll的lib文件加载后,还需要把dll对应的头文件(*.h)包含到其中,在这个头文件中给出了dll中定义的函数原型,然后声明。
2、显式的运行时链接
隐式链接虽然实现较简单,但除了必须的*.dll文件外还需要dll的*.h文件和*.lib文件,在那些只提供*.dll文件的场合就无法使用,而只能采用显式链接的方式。这种方式通过调用api函数来完成对dll的加载与卸载,其能更加有效地使用内存,在编写大型应用程序时往往采用此方式。这种方法编程具体实现步骤如下:
①使用windows api函数load library或者mfc提供的afxloadlibrary将dll模块映像到进程的内存空间,对dll模块进行动态加载。
②使用getprocaddress函数得到要调用dll中的函数的指针。
③不用dll时,用free library函数或者afxfreelibrary函数从进程的地址空间显式卸载dll。
vc中调用实例
数据加密是计算机安全领域的重要内容,其基本思想是通过变换信息的表现形式来保护敏感信息,使非授权者不能了解被保护信息的内容。常见的数据加密算法有:des,idea,rsa,ecc,aes,md5,sha等。
《共享软件加密算法库》是一款针对个人、企业开发共享软件的加密工具,支持windows平台下各类开发工具:vc、vb、delphi、pb、vfp等,算法库集成的算法有:blowfish、md5、secret16、aes、sha、crc32、rsa、des、字符串加/解密、
摘 要:介绍了动态链接库这种模块复用方法及在vc中对它的调用,并给出了一个通过复用来实现数据加密的具体实例。
引言
模块化思想贯穿于软件工程各个发展阶段,模块复用是构建大系统的一种重要思想。模块复用方法有:函数、函数库、动态链接库、com。其都是基于模块化的基本思想。函数是最简单的模块化思想,也是后面方法的基础,甚至是一个应用程序的基础。函数库是函数的组合,一般将一些功能相似的函数放在一起作为函数库,这种函数库通常叫做静态库,其链接方式是静态的。com即组件对象模型,是一种集成技术,可以使程序在运行时把各种不相关的软件程序混合在一起,而不必考虑这些不相关的程序是用什么语言编写的,它也是一种标准或者称为协议,负责将一个软件模块和另一个软件连接起来。动态链接库dll(dynamic link library)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源,其链接方式是动态的。动态链接库文件的扩展名一般是dll,也有可能是fon、sys和dry,它和可执行文件(.exe)非常相似,区别在于dll中虽然包含了可执行代码却不能单独执行,而应由windows应用程序直接或间接调用。windows操作系统包含大量动态链接库,其中最主要的是kernel32.dll、user32.dll、gdi32.dll 。
dll的调用
调用dll,首先需要将dll文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同。windows提供了两种将dll映像到进程地址空间的方法:
1、隐式的加载时链接
这种方法需要dll工程经编译产生的lib文件,此文件中包含了dll允许应用程序调用的所有函数的列表,当链接器发现应用程序调用了lib文件列出的某个函数,就会在应用程序的可执行文件的文件映像中加入一些信息,这些信息指出了包含这个函数的dll文件的名字。当这个应用程序运行时,也就是它的可执行文件被操作系统产生映像文件时,系统会查看这个映像文件中关于dll的信息,然后将这个dll文件映像到进程的地址空间。
系统通过dll文件的名称,试图加载这个文件到进程地址空间时,它寻找dll 文件的路径按照先后顺序如下:
·程序运行时的目录,即可执行文件所在的目录;
·当前程序工作目录
·系统目录:对于windows95/98来说,可以调用getsystemdirectory函数来得到,对于windowsnt/2000来说,指的是32位windows的系统目录,也可以调用getsystemdirectory函数来得到,得到的值为system32。
·windows目录
·列在path环境变量中的所有目录
vc中加载dll的lib文件的方法有以下三种:
①lib文件直接加入到工程文件列表中
在vc中打开file view一页,选中工程名,单击鼠标右键,然后选中"add files to project"菜单,在弹出的文件对话框中选中要加入dll的lib文件即可。
②设置工程的 project settings来加载dll的lib文件
打开工程的 project settings菜单,选中link,然后在object/library modules下的文本框中输入dll的lib文件。
③通过程序代码的方式
加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的lib文件。因为,在debug方式下,产生的lib文件是debug版本,如regd.lib;在release方式下,产生的lib文件是release版本,如regr.lib。
当应用程序对dll的lib文件加载后,还需要把dll对应的头文件(*.h)包含到其中,在这个头文件中给出了dll中定义的函数原型,然后声明。
2、显式的运行时链接
隐式链接虽然实现较简单,但除了必须的*.dll文件外还需要dll的*.h文件和*.lib文件,在那些只提供*.dll文件的场合就无法使用,而只能采用显式链接的方式。这种方式通过调用api函数来完成对dll的加载与卸载,其能更加有效地使用内存,在编写大型应用程序时往往采用此方式。这种方法编程具体实现步骤如下:
①使用windows api函数load library或者mfc提供的afxloadlibrary将dll模块映像到进程的内存空间,对dll模块进行动态加载。
②使用getprocaddress函数得到要调用dll中的函数的指针。
③不用dll时,用free library函数或者afxfreelibrary函数从进程的地址空间显式卸载dll。
vc中调用实例
数据加密是计算机安全领域的重要内容,其基本思想是通过变换信息的表现形式来保护敏感信息,使非授权者不能了解被保护信息的内容。常见的数据加密算法有:des,idea,rsa,ecc,aes,md5,sha等。
《共享软件加密算法库》是一款针对个人、企业开发共享软件的加密工具,支持windows平台下各类开发工具:vc、vb、delphi、pb、vfp等,算法库集成的算法有:blowfish、md5、secret16、aes、sha、crc32、rsa、des、字符串加/解密、
引言
模块化思想贯穿于软件工程各个发展阶段,模块复用是构建大系统的一种重要思想。模块复用方法有:函数、函数库、动态链接库、com。其都是基于模块化的基本思想。函数是最简单的模块化思想,也是后面方法的基础,甚至是一个应用程序的基础。函数库是函数的组合,一般将一些功能相似的函数放在一起作为函数库,这种函数库通常叫做静态库,其链接方式是静态的。com即组件对象模型,是一种集成技术,可以使程序在运行时把各种不相关的软件程序混合在一起,而不必考虑这些不相关的程序是用什么语言编写的,它也是一种标准或者称为协议,负责将一个软件模块和另一个软件连接起来。动态链接库dll(dynamic link library)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源,其链接方式是动态的。动态链接库文件的扩展名一般是dll,也有可能是fon、sys和dry,它和可执行文件(.exe)非常相似,区别在于dll中虽然包含了可执行代码却不能单独执行,而应由windows应用程序直接或间接调用。windows操作系统包含大量动态链接库,其中最主要的是kernel32.dll、user32.dll、gdi32.dll 。
dll的调用
调用dll,首先需要将dll文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同。windows提供了两种将dll映像到进程地址空间的方法:
1、隐式的加载时链接
这种方法需要dll工程经编译产生的lib文件,此文件中包含了dll允许应用程序调用的所有函数的列表,当链接器发现应用程序调用了lib文件列出的某个函数,就会在应用程序的可执行文件的文件映像中加入一些信息,这些信息指出了包含这个函数的dll文件的名字。当这个应用程序运行时,也就是它的可执行文件被操作系统产生映像文件时,系统会查看这个映像文件中关于dll的信息,然后将这个dll文件映像到进程的地址空间。
系统通过dll文件的名称,试图加载这个文件到进程地址空间时,它寻找dll 文件的路径按照先后顺序如下:
·程序运行时的目录,即可执行文件所在的目录;
·当前程序工作目录
·系统目录:对于windows95/98来说,可以调用getsystemdirectory函数来得到,对于windowsnt/2000来说,指的是32位windows的系统目录,也可以调用getsystemdirectory函数来得到,得到的值为system32。
·windows目录
·列在path环境变量中的所有目录
vc中加载dll的lib文件的方法有以下三种:
①lib文件直接加入到工程文件列表中
在vc中打开file view一页,选中工程名,单击鼠标右键,然后选中"add files to project"菜单,在弹出的文件对话框中选中要加入dll的lib文件即可。
②设置工程的 project settings来加载dll的lib文件
打开工程的 project settings菜单,选中link,然后在object/library modules下的文本框中输入dll的lib文件。
③通过程序代码的方式
加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的lib文件。因为,在debug方式下,产生的lib文件是debug版本,如regd.lib;在release方式下,产生的lib文件是release版本,如regr.lib。
当应用程序对dll的lib文件加载后,还需要把dll对应的头文件(*.h)包含到其中,在这个头文件中给出了dll中定义的函数原型,然后声明。
2、显式的运行时链接
隐式链接虽然实现较简单,但除了必须的*.dll文件外还需要dll的*.h文件和*.lib文件,在那些只提供*.dll文件的场合就无法使用,而只能采用显式链接的方式。这种方式通过调用api函数来完成对dll的加载与卸载,其能更加有效地使用内存,在编写大型应用程序时往往采用此方式。这种方法编程具体实现步骤如下:
①使用windows api函数load library或者mfc提供的afxloadlibrary将dll模块映像到进程的内存空间,对dll模块进行动态加载。
②使用getprocaddress函数得到要调用dll中的函数的指针。
③不用dll时,用free library函数或者afxfreelibrary函数从进程的地址空间显式卸载dll。
vc中调用实例
数据加密是计算机安全领域的重要内容,其基本思想是通过变换信息的表现形式来保护敏感信息,使非授权者不能了解被保护信息的内容。常见的数据加密算法有:des,idea,rsa,ecc,aes,md5,sha等。
《共享软件加密算法库》是一款针对个人、企业开发共享软件的加密工具,支持windows平台下各类开发工具:vc、vb、delphi、pb、vfp等,算法库集成的算法有:blowfish、md5、secret16、aes、sha、crc32、rsa、des、字符串加/解密、