Windows OpenSSL笔记


功能作用:SSL(Secure Socket Layer)netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版。TLS(Transport Layer Security)IETFTLS 工作组在SSL3.0基础之上提出的安全通信标准,目前版本是1.0,即RFC2246SSL/TLS提供的安全机制可以保证应用层数据在互联网络传输不被监听、伪造和窜改。

内部包含什么:它是一个健全的、商业级的、全开放的和开放源代码的工具包,实现安全套接层协议(SSL v2/v3)和传输层安全协议(TLS v1)以及形成一个功效完整的通用目的的加密技术库。openssl 是sslv2sslv3tlsv1的一份完整实现,内部包含了大量加密算法程序.其应用程序提供了丰富的加密、验证、证书生成等功能,甚至可以用它建立一个完整的CA。同时,它也提供了一套完整的库函数,可用开发用SSL/TLS的通信程序序。Apachehttps两种版本 mod_sslapachessl均基于它实现的。

缺点:openssl 的缺点是文档太少,连一份完整的函数说明都没有,man page也至今没做完整,如果想用它编程序,除了熟悉已有的文档(包括 ssleaymod_sslapachessl的文档)外,可以到它的maillist上找相关的帖子,许多问题可以在以前的文章中找到答案。

优点:OpenSSL 采用 语言作为开发语言,这使得 OpenSSL 具有优秀的跨平台性能。OpenSSL 支持 LinuxWindowsBSDMacVMS 等平台,这使得 OpenSSL 具有广泛的适用性。Openssl是开源的,对于程序员来说,openssl所有的技术实现细节都是可见的。 Openssl的核心加密库ssleay涉及范围广,功能齐全,逻辑合理。打破了美国不允许强加密产品出口的限制 

历史版本:



1.openssl+perl+VS2010install

ActivePerl window安装程序下载:http://www.activestate.com/activeperl/downloads/

然后当然要下载OpenSSL的源码了: http://www.openssl.org/source/

下载ActivePerl 5.16.3 for windows(x86)后安装 ,和解压OpenSSL源代码压缩包文件openssl-1.0.1e.tar.gz[LATEST]。安装完成后,使用管理员权限打开VS2010的命令提示窗口,然后进入OpenSSL的目录,按照以下步骤就可以进行编译了:

cd openssl

perl configure VC-WIN32

ms\do_ms

完成上面步骤后可以看到两个关键脚本文件:nt.makntdll.mak.如果我们需要编译后的OpenSSL库是支持动态DLL形式的,那么应该使用ntddll.mak文件进行编译,这样编译完成我们会得到四个与OpenSSL的API库有关文件:ssleay32.lib,libeay32.lib,ssleay32.dlllibeay32.dll.执行的编译命令形式如下:nmake-f ms\ntdll.mak

如果不希望以动态库的形式使用OpenSSL,那么可以使用nt.mak文件进行编译.这样编译后使用OpenSSL的时候直接将代码链接进我们的程序里面.执行命令如下:nmake -f ms\nt.mak

nmake -f ms\ntdll.mak    //编译动态库

nmake -f ms\ntdll.mak test   //测试动态库

 

编译完成后会在\out32dll 目录下生成库文件()和动态链接库文件(libeay32ssleay32Lib以及Dll文件)、Openssl可执行文件openssl.exe和测试程序。

 

2.用Openssl进行文件的对称加密操作

(1)Openssl支持的加密算法有:

-aes-128-cbc-aes-128-cfb -aes-128-cfb1

-aes-128-cfb8 -aes-128-ecb -aes-128-ofb

-aes-192-cbc -aes-192-cfb -aes-192-cfb1

-aes-192-cfb8 -aes-192-ecb -aes-192-ofb

-aes-256-cbc -aes-256-cfb -aes-256-cfb1

-aes-256-cfb8 -aes-256-ecb -aes-256-ofb

-aes128 -aes192 -aes256

-bf -bf-cbc -bf-cfb

-bf-ecb -bf-ofb -blowfish

-cast -cast-cbc -cast5-cbc

-cast5-cfb -cast5-ecb -cast5-ofb

-des -des-cbc -des-cfb

-des-cfb1 -des-cfb8 -des-ecb

-des-ede -des-ede-cbc -des-ede-cfb

-des-ede-ofb -des-ede3 -des-ede3-cbc

-des-ede3-cfb -des-ede3-ofb -des-ofb

-des3 -desx -desx-cbc

-rc2 -rc2-40-cbc -rc2-64-cbc

-rc2-cbc -rc2-cfb -rc2-ecb

-rc2-ofb -rc4 -rc4-40

 

(2)Openssl加密指令语法:

SYNOPSIS

openssl enc -ciphername [-in filename][-out filename] [-pass arg] [-e]

[-d] [-a] [-A] [-k password] [-kfile filename][-K key] [-iv IV] [-p]

[-P] [-bufsize number] [-nopad] [-debug]

 

说明:

-chipername选项:加密算法,Openssl支持的算法在上面已经列出了,你只需选择其中一种算法即可实现文件加密功能。

-in选项:输入文件,对于加密来说,输入的应该是明文文件;对于解密来说,输入的应该是加密的文件。该选项后面直接跟文件名。

-out选项:输出文件,对于加密来说,输出的应该是加密后的文件名;对于解密来说,输出的应该是明文文件名。

-pass选项:选择输入口令的方式,输入源可以是标准输入设备,命令行输入,文件、变量等。

-e选项:实现加密功能(不使用-d选项的话默认是加密选项)。

-d选项:实现解密功能。

-a和-A选项:对文件进行BASE64编解码操作。

-K选项:手动输入加密密钥(不使用该选项,Openssl会使用口令自动提取加密密钥)。

-IV选项:输入初始变量(不使用该选项,Openssl会使用口令自动提取初始变量)。

-salt选项:是否使用盐值,默认是使用的。

-p选项:打印出加密算法使用的加密密钥。

 

(3)案例:

1. 使用aes-128-cbc算法加密文件:

openssl enc -aes-128-cbc -in install.log-out enc.log

(注:这里install.log是你想要加密的文件,enc.log是加密后的文件,回车后系统会提示你输入口令)

2. 解密刚刚加密的文件:

openssl enc -d -aes-128-cbc-in enc.log -out install.log

(注:enc.log是刚刚加密的文件,install.log是解密后的文件,-d选项实现解密功能)

3.加密文件后使用BASE64格式进行编码

openssl enc -aes-128-cbc -in install.log-out enc.log -a

4.使用多种口令输入方式加密:

openssl enc -des-ede3-cbc -in install.log-out enc.log -pass pass:111111

(这种方式的好处是你可以把它写入到脚本中,自动完成加密功能,不使用pass选项默认系统会提示输入口令,并且确认,是需要人工操作的)

例子:

 

命令执行结果:


3. 实例

在VS2010项目中引用OpensslLib静态库实现SHA256散列算法:

项目属性-VC++目录--包含目录:

如:D:\openssl-1.0.1e\include  或者D:\openssl-1.0.1e\inc32

项目属性-VC++目录—库目录

如:D:\openssl-1.0.1e\out32dll
源代码:

#include <openssl/sha.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//添加静态链接库
#pragma comment(lib, "libeay32.lib")//密码算法库
//#pragma comment(lib, "ssleay32.lib")//SSL协议动态库

void sha256_str(char* str, char outputBuffer[65]) 
{ 
	unsigned char hash[SHA256_DIGEST_LENGTH]; 
	SHA256_CTX sha256; 
	SHA256_Init(&sha256); 
	SHA256_Update(&sha256, str, strlen(str)); 
	SHA256_Final(hash, &sha256); 
	for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) 
	{ 
		sprintf(outputBuffer + (i * 2), "%02x", hash[i]); 
	} 
}

int main()
{
	char *in_str="abc";
	char outbuffer[65];//64*8=512
	system("title SHA256");
	sha256_str(in_str, outbuffer);
	printf("outbuffer=%s\n",outbuffer);
	printf("strlen(outbuffer)=%d\n",strlen(outbuffer));
	return 0;
}

运行结果:


SHA256哈希 - 在线SHA256哈希发生器运行结果:

http://www.convertstring.com/zh_CN/Hash/SHA256

 


 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值